本文實例講述了js正則表達式惰性匹配和貪婪匹配用法。分享給大家供大家參考,具體如下:
在講貪婪模式和惰性模式之前,先回顧一下JS正則基礎:
寫法基礎:
①不需要雙引號,直接用//包含 => /wehfwue123123/.test();
②反斜杠/表示轉義 =>//.jpg$/
③用法基礎:.test(str);
語法:
①錨點類
/^a/=>以"a"開頭
//.jpg$/=>以".jpg"結尾
②字符類
[abc]:a或b或c
[0-9]:一個數字
[a-z]:一個字母
. :任意字符
③元字符
^:在[]里面用表示非,在[]外面用表示開頭
/d:[0-9]
/s:空白符
/w:[A-Za-z0-9_]
/D:[^/d]-非數字
/S:非空白符
④量詞
{m,n}:m到n次
元字符表示:
*:{0,}
?:{0,1}
+:{1,}
難點:貪婪模式/惰性模式
貪婪模式――在匹配成功的前提下,盡可能多的去匹配
惰性模式――在匹配成功的前提下,盡可能少的去匹配
解釋一:碼文并茂
使用正則表達式中的貪婪、惰性的量詞可以控制表達式匹配過程,我們知道量詞?、*、+的意義,可以指定相關模式出現的次數,默認的情況下我們使用的是貪婪量詞,它的匹配過程是從整個字符串開始查看,如果不匹配就去掉最后一個,再看看是否匹配,如此循環一直到匹配或字符串空為止,如:
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;//*?是惰性量詞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, 匹配了,保存這個結果,再從下一個開始
小結:
默認的貪婪匹配是從后往前匹配,最大長度的匹配,惰性匹配就是在量詞后面加個?從字符串的前面開始匹配,最小長度的匹配
PS:這里再為大家提供2款非常方便的正則表達式工具供大家參考使用:
JavaScript正則表達式在線測試工具:
http://tools.VeVB.COm/regex/javascript
正則表達式在線生成工具:
http://tools.VeVB.COm/regex/create_reg
更多關于JavaScript相關內容感興趣的讀者可查看本站專題:《JavaScript替換操作技巧總結》、《JavaScript查找算法技巧總結》、《JavaScript數據結構與算法技巧總結》、《JavaScript遍歷算法與技巧總結》、《JavaScript中json操作技巧總結》、《JavaScript錯誤與調試技巧總結》及《JavaScript數學運算用法總結》
希望本文所述對大家JavaScript程序設計有所幫助。
新聞熱點
疑難解答