js正則表達(dá)式惰性匹配和貪婪匹配用法分析
本文實(shí)例講述了js正則表達(dá)式惰性匹配和貪婪匹配用法。分享給大家供大家參考,具體如下:
在講貪婪模式和惰性模式之前,先回顧一下JS正則基礎(chǔ):
寫法基礎(chǔ):
①不需要雙引號(hào),直接用//包含 => /wehfwue123123/.test();
②反斜杠\表示轉(zhuǎn)義 =>/\.jpg$/
③用法基礎(chǔ):.test(str);
語法:
①錨點(diǎn)類
/^a/=>以"a"開頭
/\.jpg$/=>以".jpg"結(jié)尾
②字符類
[abc]:a或b或c
[0-9]:一個(gè)數(shù)字
[a-z]:一個(gè)字母
. :任意字符
③元字符
^:在[]里面用表示非,在[]外面用表示開頭
\d:[0-9]
\s:空白符
\w:[A-Za-z0-9_]
\D:[^\d]-非數(shù)字
\S:非空白符
④量詞
{m,n}:m到n次
元字符表示:
*:{0,}
?:{0,1}
+:{1,}
難點(diǎn):貪婪模式/惰性模式
貪婪模式——在匹配成功的前提下,盡可能多的去匹配
惰性模式——在匹配成功的前提下,盡可能少的去匹配
解釋一:碼文并茂
使用正則表達(dá)式中的貪婪、惰性的量詞可以控制表達(dá)式匹配過程,我們知道量詞?、*、+的意義,可以指定相關(guān)模式出現(xiàn)的次數(shù),默認(rèn)的情況下我們使用的是貪婪量詞,它的匹配過程是從整個(gè)字符串開始查看,如果不匹配就去掉最后一個(gè),再看看是否匹配,如此循環(huán)一直到匹配或字符串空為止,如:
vars ="abbbaabbbaaabbb1234"; varre1=/.*bbb/g;//*是貪婪量詞 re1.test(s);
這個(gè)匹配過程將從整個(gè)字符串開始:
re1.test("abbbaabbbaaabbb1234");//false ,則去掉最后一個(gè)字符4再繼續(xù) re1.test("abbbaabbbaaabbb123");//false ,則去掉最后一個(gè)字符3再繼續(xù) re1.test("abbbaabbbaaabbb12");//false ,則去掉最后一個(gè)字符2再繼續(xù) re1.test("abbbaabbbaaabbb1");//false ,則去掉最后一個(gè)字符1再繼續(xù) re1.test("abbbaabbbaaabbb");//true ,結(jié)束
在貪婪量詞的后面加多一個(gè)?就變成了惰性量詞,它的匹配過程相反,是從前面第一個(gè)開始,不匹配則加一個(gè),如此循環(huán)直到字符串結(jié)束,以上面的為例子。
vars ="abbbaabbbaaabbb1234"; varre1=/.*?bbb/g;//*?是惰性量詞 re1.test(s);
它的匹配過程如下:
re1.test("a");//false, 再加一個(gè) re1.test("ab");//false, 再加一個(gè) re1.test("abb");//false, 再加一個(gè) re1.test("abbb");//true, 匹配了,保存這個(gè)結(jié)果,再?gòu)南乱粋€(gè)開始 re1.test("a");//false, 再加一個(gè) re1.test("aa");//false, 再加一個(gè) re1.test("aab");//false, 再加一個(gè) re1.test("aabb");//false, 再加一個(gè) re1.test("aabbb");//true, 匹配了,保存這個(gè)結(jié)果,再?gòu)南乱粋€(gè)開始
小結(jié):
默認(rèn)的貪婪匹配是從后往前匹配,最大長(zhǎng)度的匹配,惰性匹配就是在量詞后面加個(gè)?從字符串的前面開始匹配,最小長(zhǎng)度的匹配
PS:這里再為大家提供2款非常方便的正則表達(dá)式工具供大家參考使用:
JavaScript正則表達(dá)式在線測(cè)試工具:
http://tools.jb51.net/regex/javascript
正則表達(dá)式在線生成工具:
http://tools.jb51.net/regex/create_reg
更多關(guān)于JavaScript相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《JavaScript替換操作技巧總結(jié)》、《JavaScript查找算法技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》、《JavaScript中json操作技巧總結(jié)》、《JavaScript錯(cuò)誤與調(diào)試技巧總結(jié)》及《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)》
希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。
- JavaScript惰性求值的一種實(shí)現(xiàn)方法示例
- JS設(shè)計(jì)模式之惰性模式(二)
- JavaScript學(xué)習(xí)筆記之惰性函數(shù)示例詳解
- JS 學(xué)習(xí)總結(jié)之正則表達(dá)式的懶惰性和貪婪性
- JS優(yōu)化與惰性載入函數(shù)實(shí)例分析
- JavaScript AJAX之惰性載入函數(shù)
- 利用函數(shù)的惰性載入提高javascript代碼執(zhí)行效率
- JavaScript 函數(shù)惰性載入的實(shí)現(xiàn)及其優(yōu)點(diǎn)介紹
- 如何用JavaScript實(shí)現(xiàn)一個(gè)數(shù)組惰性求值庫(kù)
相關(guān)文章
JavaScript中的一些實(shí)用小技巧總結(jié)
這篇文章主要給大家總結(jié)介紹了關(guān)于JavaScript中的一些實(shí)用小技巧,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用JavaScript具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04原生js實(shí)現(xiàn)無限循環(huán)輪播圖效果
本文主要介紹了原生js實(shí)現(xiàn)無限循環(huán)輪播圖效果的示例代碼。具有很好的參考價(jià)值,下面跟著小編一起來看下吧2017-01-01JavaScript?內(nèi)置對(duì)象?BigInt詳細(xì)解析
這篇文章主要介紹了JavaScript?內(nèi)置對(duì)象?BigInt詳細(xì)解析,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-07-07js實(shí)現(xiàn)移動(dòng)端tab切換時(shí)下劃線滑動(dòng)效果
這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)移動(dòng)端tab切換時(shí)下劃線滑動(dòng)效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-09-09