1. 程式人生 > 其它 >js正則表示式的貪婪匹配和惰性匹配

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, 匹配了,儲存這個結果,再從下一個開始

......