正则表达式:正则的几个基本概念来源: 发布时间:星期日, 2009年9月6日 浏览:2次 评论:0
经常看到说正则文章但说只是思路方法却很少有说以下几个基本概念:
1.贪婪:+,*,?,{m,n}等默认是贪婪匹配即尽可能多匹配也叫最大匹配 如果后面加上?就转化为非贪婪匹配需要高版本支持 2.获取:默认用(x|y)是获取匹配很多时候只是测试不定要求得到所匹配数据尤其在嵌套匹配或大数据中就要用非获取匹配(?:x|y)这样提高了效率优化了 3.消耗:默认是消耗匹配般在预查中是非消耗匹配 举个例子2003-2-8要变为2003-02-08 如果用/-(\d)-/第 2次匹配将从8开始从而只替换第个2 如果用/-(\d)(?=-)/则第 2次匹配从第 2个-开始即不消耗- 4.预查:js中分为正向预查和负向预查 如上面(?=pattern)是正向预查在任何匹配 pattern 串开始处匹配查找串还有(?!pattern)是负向预查在任何不匹配 pattern 串开始处匹配查找串负向预查有时会用在对[^]扩充[^]只是些而?!可以使整个串 5.回调:般用在替换上即根据不用匹配内容返回不用替换值从而简化了需要高版本支持 6.引用:\num 对所获取第num个匹配引用 例如'(.)\1\1' 匹配AAA型'(.)(.)\2\1' 匹配ABBA型 点击运行可以看到效果: [Ctrl+A 全选 提示:你可先修改部分代码,再按运行] 当然还有很多这些都只是基本需要掌握 遇到正则问题般可用以下两种思路方法解决: 1.分类即根据所有可能列出各种情况如2003以内数 0 0 1-999 [1-9]\d{0,2} 1000-1999 1\d{3} 2000-2003 200[0-3] 所以最后匹配就是 (0|[1-9]\d{0,2}|1\d{3}|200[0-3]) 2.分组即将整句分为区别最小单元如'、%、_成双出现 能成组即允许存在有 '' %% 如果是大于2偶数个可细分为多个更小2单元 __ [^'%_] 非以上 所以最后匹配就是 ^(''|%%|__|[^'%_])*$ -------------------------------------------------------------------------------- replace + function 5.5+支持 点击运行可以看到效果: [Ctrl+A 全选 提示:你可先修改部分代码,再按运行] 0
相关文章读者评论发表评论 |