正则贪婪,非贪婪,分组,前瞻

Posted btg.yoyo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则贪婪,非贪婪,分组,前瞻相关的知识,希望对你有一定的参考价值。

1.贪婪模式

正则是:/\d{3,5}/g,字符串是 12345678

那么exec 方法或者match方法返回的结果是什么呢? 是 [123,456] 还是 [1234,5678] 还是[12345]

答案是:[12345] . 正则表达式默认是贪婪模式,即尽可能多的匹配,如果失败那么减一匹配直到最小值。在这种情况下前面5个数字匹配后,下标来到6处,678不会再匹配

2.非贪婪模式

让正则表达式尽可能少的匹配,也就是说一旦成功匹配就不在继续尝试就是非贪婪模式

只要在量词后加上?即可

‘123456789‘.match(/\d{3,5}?/g); 返回[123,456,789]

3.分组反向引用

2015-12-25 =》 12/25/2015

可以这样。$n表示对应的分组.如果没有这样的分组那么就会把$n 当成字符串处理

‘2015-12-25‘.replace(/(\d{4})-(\d{2})-(\d{2})/g,‘$2/$3/$1‘)

栗子:

‘a1b2c3d4‘.replace(/((\w\d){3})/g,‘X$1xx‘),返回结果"Xa1b2c3xxd4"

4.忽略分组(只是利用分组,但确不捕获)

不希望捕获某些分组只要在分组内加上?: 就可以

栗子:

‘sasdadsssaaaattt‘.replace(/(?:sss|ttt)/g,‘X$1X‘)

返回:
"sasdadX$1XaaaaX$1X"

4.前瞻与后顾

1.正则表达式从文本头部向尾部开始解析,这样的解析方向称为‘前‘

2.前瞻 就是在正则表达式匹配到规则的时候,向前检查是否符合断言,后顾/后瞻 方向相反

3.javascript 不支持后顾

4.符合和不符合特定断言称为肯定/正向 匹配 和 否定/负向 匹配

5.语法: exp(?=assert)  正向  exp(?!assert)   负向

栗子:

‘a1b3c5‘.replace(/\w(?=\d)/g,‘X0X‘),返回:"X0X1X0X3X0X5"。 数字部分并不会被替换

‘a1b3c5‘.replace(/\w(?!\d)/g,‘X0X‘),返回: "aX0XbX0XcX0X"。 数字也是字符

 

以上是关于正则贪婪,非贪婪,分组,前瞻的主要内容,如果未能解决你的问题,请参考以下文章

负前瞻正则表达式贪婪(为啥.*?太贪婪)

正则表达式第三回--模式分组与前瞻

15.python正则匹配 元字符转义重复或捕获分组断言:零度断言负向零宽断言贪婪非贪婪引擎选项

js正则匹配总结

python 贪婪和非贪婪模式

JavaScript之正则表达式