js正则表达式(.+)和(.+?)的区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js正则表达式(.+)和(.+?)的区别相关的知识,希望对你有一定的参考价值。

(.+)默认是贪婪匹配

(.+?)为惰性匹配

 

疑问号让.+的搜索模式从贪婪模式变成惰性模式。

var str = ‘aaa<div style="font-color:red;">123456</div>bbb‘

<.+?>会匹配<div style="font-color:red;">

<.+>会匹配<div style="font-color:red;">123456</div>

要在浏览器测试结果的话,输入:

var str = ‘aaa<div style="font-color:red;">123456</div>bbb‘

str.match(/<.+?>/);

str.match(/<.+>/);

 

下面举个简单的例子来说明。

1.贪婪匹配是先看整个字符串是否匹配,如果不匹配,它会去掉字符串的最后一个字符,并再次尝试。如果还不匹配,那么再去掉当前最后一个,直到发现匹配或不剩任何字符。

var str=‘abcdabceba‘

/.+b/         //匹配一个或多个任意字符后面跟一个字母b

执行str.match(/.+b/)

第一次(先看整个字符串是否是一个匹配) abcdabceba 不匹配,然后去掉最后一个字符a

第二次(去掉最后一个字符后再匹配) abcdabceb 匹配,返回abcdabceb。

2.惰性匹配是从左侧第一个字符开始向右匹配, 先看第一个字符是不是一个匹配, 如果不匹配就加入下一个字符再尝式匹配, 直到发现匹配...

执行str.match(/.+?b/)

第一次(读入左侧第一个字符) a 不匹配加一个再式

第二次 ab 匹配,返回ab

以上是关于js正则表达式(.+)和(.+?)的区别的主要内容,如果未能解决你的问题,请参考以下文章

js正则表达式(.+)和(.+?)的区别

转转转---js正则表达exec与match的区别说明

js正则表达式test方法exec方法与字符串search方法区别

js正则表达式总结

js正则 变量中括号

js正则函数中test和match的区别