JS正則表達(dá)式修飾符global(/g)用法分析
本文實(shí)例講述了JS正則表達(dá)式修飾符global(/g)用法。分享給大家供大家參考,具體如下:
/g修飾符代表全局匹配,查找所有匹配而非在找到第一個(gè)匹配后停止。先看一段經(jīng)典代碼:
var str = "123#abc"; var noglobal = /abc/i;//非全局匹配模式 console.log(re.test(str)); //輸出ture console.log(re.test(str)); //輸出ture console.log(re.test(str)); //輸出ture console.log(re.test(str)); //輸出ture var re = /abc/ig;//全局匹配 console.log(re.test(str)); //輸出ture console.log(re.test(str)); //輸出false console.log(re.test(str)); //輸出ture console.log(re.test(str)); //輸出false
可以看到:當(dāng)使用/g模式的時(shí)候,多次執(zhí)行RegExp.test()的輸出結(jié)果會(huì)有差別。下面的解釋摘抄自這篇文章《Javascript中正則表達(dá)式的全局匹配模式分析》:
在創(chuàng)建正則表達(dá)式對(duì)象時(shí)如果使用了“g”標(biāo)識(shí)符或者設(shè)置它了的?global屬性值為ture時(shí),那么新創(chuàng)建的正則表達(dá)式對(duì)象將使用模式對(duì)要將要匹配的字符串進(jìn)行全局匹配。在全局匹配模式下可以對(duì)指定要查找的字符串執(zhí)行多次匹配。每次匹配使用當(dāng)前正則對(duì)象的lastIndex屬性的值作為在目標(biāo)字符串中開 始查找的起始位置。lastIndex屬性的初始值為0,找到匹配的項(xiàng)后lastIndex的值被重置為匹配內(nèi)容的下一個(gè)字符在字符串中的位置索引,用來標(biāo)識(shí)下次執(zhí)行匹配時(shí)開始查找的位置。如果找不到匹配的項(xiàng)lastIndex的值會(huì)被設(shè)置為0。當(dāng)沒有設(shè)置正則對(duì)象的全局匹配標(biāo)志時(shí)lastIndex屬性的值始終為0,每次執(zhí)行匹配僅查找字符串中第一個(gè)匹配的項(xiàng)。
可以通過下面這段代碼驗(yàn)證lastIndex在/g模式下的表現(xiàn):
var str = "012345678901234567890123456789"; var re = /123/g; console.log(re.lastIndex); //輸出0,正則表達(dá)式剛開始創(chuàng)建 console.log(re.test(str)); //輸出ture console.log(re.lastIndex); //輸出4 console.log(re.test(str)); //輸出true console.log(re.lastIndex); //輸出14 console.log(re.test(str)); //輸出ture console.log(re.lastIndex); //輸出24 console.log(re.test(str)); //輸出false console.log(re.lastIndex); //輸出0,沒有找到匹配項(xiàng)被重置
上面我們看到了/g模式對(duì)于RegExp.test()函數(shù)的影響,現(xiàn)在我們看下對(duì)RegExp.exec()函數(shù)的影響。RegExp.exec()返回一個(gè)數(shù)組,其中存放匹配的結(jié)果。如果未找到匹配,則返回值為 null。
var str = "012345678901234567890123456789"; var re = /abc/; //exec沒有找到匹配 console.log(re.exec(str));//null console.log(re.lastIndex);//0
var str = "012345678901234567890123456789"; var re = /123/; var resultArray = re.exec(str); console.log(resultArray[0]);//匹配結(jié)果123 console.log(resultArray.input);//目標(biāo)字符串str console.log(resultArray.index);//匹配結(jié)果在原始字符串str中的索引
對(duì)于RegExp.exec方法,不加入g,則只返回第一個(gè)匹配,無論執(zhí)行多少次均是如此;如果加入g,則第一次執(zhí)行也返回第一個(gè)匹配,再執(zhí)行返回第二個(gè)匹配,依次類推。
var str = "012345678901234567890123456789"; var re = /123/; var globalre = /123/g; //非全局匹配 var resultArray = re.exec(str); console.log(resultArray[0]);//輸出123 console.log(resultArray.index);//輸出1 console.log(globalre.lastIndex);//輸出0 var resultArray = re.exec(str); console.log(resultArray[0]);//輸出123 console.log(resultArray.index);//輸出1 console.log(globalre.lastIndex);//輸出0 //全局匹配 var resultArray = globalre.exec(str); console.log(resultArray[0]);//輸出123 console.log(resultArray.index);//輸出1 console.log(globalre.lastIndex);//輸出4 var resultArray = globalre.exec(str); console.log(resultArray[0]);//輸出123 console.log(resultArray.index);//輸出11 console.log(globalre.lastIndex);//輸出14
當(dāng)使用/g匹配模式的時(shí)候,我們可以通過循環(huán),獲取所有的匹配項(xiàng)。
var str = "012345678901234567890123456789"; var globalre = /123/g; //循環(huán)遍歷,獲取所有匹配 var result = null; while ((result = globalre.exec(str)) != null) { console.log(result[0]); console.log(globalre.lastIndex); }
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正則表達(dá)式技巧大全》、《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ì)有所幫助。
相關(guān)文章
詳解如何使用JavaScript中Promise類實(shí)現(xiàn)并發(fā)任務(wù)控制
在JavaScript中,Promise是一種用于管理異步操作的強(qiáng)大工具,但是,有時(shí)候需要更高級(jí)的控制,以限制同時(shí)執(zhí)行的任務(wù)數(shù)量,以避免系統(tǒng)資源超負(fù)荷,本文將深入探討JavaScript中的并發(fā)任務(wù)控制,并介紹如何創(chuàng)建一個(gè)自定義的Promise類——ConcurrentPromise2023-08-08前端原生js實(shí)現(xiàn)拖拽排課效果實(shí)例
這篇文章主要介紹了如何實(shí)現(xiàn)一個(gè)簡(jiǎn)單的課程表拖拽功能,通過HTML、CSS和JavaScript的配合,我們實(shí)現(xiàn)了課程項(xiàng)的拖拽、放置和顯示功能,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-02-02用js實(shí)現(xiàn)控件的隱藏及style.visibility的使用
用js控制控件的隱藏,使用style.visibility實(shí)現(xiàn) ,具體代碼如下,感興趣的朋友可以參考下哈,希望對(duì)大家有所幫助2013-06-06Web componentd組件內(nèi)部事件回調(diào)及痛點(diǎn)剖析
這篇文章主要為大家介紹了Web componentd組件內(nèi)部事件回調(diào)示例及其痛點(diǎn)的剖析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2021-11-11純js實(shí)現(xiàn)倒計(jì)時(shí)功能
本文主要介紹了通過js實(shí)現(xiàn)頁面的倒計(jì)時(shí)功能的思路與方法,具有一定的參考價(jià)值,下面跟著小編一起來看下吧2017-01-01JS計(jì)算距當(dāng)前時(shí)間的時(shí)間差實(shí)例
下面小編就為大家分享一篇JS計(jì)算距當(dāng)前時(shí)間的時(shí)間差實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2017-12-12