js正则表达式的贪婪匹配和惰性匹配

量词*量词+ 都是默认的贪婪匹配,在量词后面加上问号?就改成了惰性匹配!

什么是贪婪匹配?

匹配过程是从整个字符串开始查看,如果不匹配就去掉最后一个,再看看是否匹配,如此循环一直到匹配或字符串空为止,如:

vars ="abbbaabbbaaabbb1234";

varre1=/.bbb/g;//是贪婪量词

re1.test(s);

这个匹配过程将从整个字符串开始:

re1.test("abbbaabbbaaabbb1234");//false ,则去掉最后一个字符4再继续

re1.test("abbbaabbbaaabbb123");//false ,则去掉最后一个字符3再继续

re1.test("abbbaabbbaaabbb12");//false ,则去掉最后一个字符2再继续

re1.test("abbbaabbbaaabbb1");//false ,则去掉最后一个字符1再继续

re1.test("abbbaabbbaaabbb");//true ,结束

在贪婪量词的后面加多一个?就变成了惰性量词,它的匹配过程相反,是从前面第一个开始,不匹配则加一个,如此循环直到字符串结束,以上面的为例子。

vars ="abbbaabbbaaabbb1234";

varre1=/.?bbb/g;//?是惰性量词

注意:?是加在bbb前面的,即紧跟对应的量词后面
re1.test(s);

它的匹配过程如下:

re1.test("a");//false, 再加一个

re1.test("ab");//false, 再加一个

re1.test("abb");//false, 再加一个

re1.test("abbb");//true, 匹配了,保存这个结果,再从下一个开始

re1.test("a");//false, 再加一个

re1.test("aa");//false, 再加一个

re1.test("aab");//false, 再加一个

re1.test("aabb");//false, 再加一个

re1.test("aabbb");//true, 匹配了,保存这个结果,再从下一个开始

......

原文地址:https://www.cnblogs.com/lyzz1314/p/15650460.html