Javascript中正則表達(dá)式的全局匹配模式分析
更新時(shí)間:2011年04月26日 23:31:18 作者:
先看一道JavaScript題目,據(jù)說(shuō)是國(guó)內(nèi)某知名互聯(lián)網(wǎng)企業(yè)的JavaScript筆試題,如果對(duì)正則的全局匹配模式不了解的話(huà)可能會(huì)對(duì)下面的輸出結(jié)果感到疑惑。
復(fù)制代碼 代碼如下:
var str = "123#abc";
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
在創(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)字符串中開(kāi)始查找的起始位置。lastIndex屬性的初始值為0,找到匹配的項(xiàng)后lastIndex的值被重置為匹配內(nèi)容的下一個(gè)字符在字符串中的位置索引,用來(lái)標(biāo)識(shí)下次執(zhí)行匹配時(shí)開(kāi)始查找的位置。如果找不到匹配的項(xiàng)lastIndex的值會(huì)被設(shè)置為0。當(dāng)沒(méi)有設(shè)置正則對(duì)象的全局匹配標(biāo)志時(shí)lastIndex屬性的值始終為0,每次執(zhí)行匹配僅查找字符串中第一個(gè)匹配的項(xiàng)??梢酝ㄏ旅娴拇a來(lái)查看在執(zhí)行匹配相應(yīng)的lastIndex 屬性的值。
復(fù)制代碼 代碼如下:
var str = "123#abc";
var re = /abc/ig;
console.log(re.test(str)); //輸出ture
console.log(re.lastIndex); //輸出7
console.log(re.test(str)); //輸出false
console.log(re.lastIndex); //輸出0
console.log(re.test(str)); //輸出ture
console.log(re.lastIndex); //輸出7
console.log(re.test(str)); //輸出false
console.log(re.lastIndex); //輸出0
關(guān)于RegExp.prototype.exec(str)方法和String.prototype.math(rgExp)方法
正則對(duì)象的test方法返回值為true或flase,在僅需要檢測(cè)目標(biāo)字符串與指定模式是否匹配,但不需要獲取匹配內(nèi)容時(shí)這個(gè)方法非常有用。當(dāng)需要獲取匹配結(jié)果時(shí)就需要用RegExp類(lèi)型的exec(str)方法或String類(lèi)型的match(rgExp)方法。
RegExp.prototype.exec(str)方法返回NULL或返會(huì)一個(gè)數(shù)組,在數(shù)組的第0個(gè)元素存放的是在字符串str中查找到的匹配內(nèi)容,1到n個(gè)元素返回的是在模式中使用括號(hào)"()"指定的子匹配項(xiàng)的內(nèi)容。
在沒(méi)有使用全局標(biāo)志時(shí)String.prototype.math(rgExp)方法和RegExp.prototype.exec(str)的行為類(lèi)似。當(dāng)設(shè)置了全局匹配標(biāo)志時(shí)String.prototype.math(rgExp)方法返回的數(shù)組項(xiàng)元素0到n中包含了所有匹配到的項(xiàng)不包含子匹配項(xiàng)。這時(shí)可以使用RegExp.$1..$9獲取9個(gè)子匹配。
您可能感興趣的文章:
- javascript中使用replaceAll()函數(shù)實(shí)現(xiàn)字符替換的方法
- Javascript中使用exec進(jìn)行正則表達(dá)式全局匹配時(shí)的注意事項(xiàng)
- JavaScript實(shí)現(xiàn)的字符串replaceAll函數(shù)代碼分享
- javascript實(shí)現(xiàn)全局匹配并替換的方法
- java中replaceAll替換圓括號(hào)實(shí)例代碼
- Java中replace與replaceAll的區(qū)別與測(cè)試
- java字符串的替換replace、replaceAll、replaceFirst的區(qū)別說(shuō)明
- Java replaceAll()方法報(bào)錯(cuò)Illegal group reference的解決辦法
- String.replaceAll方法詳析(正則妙用)
- 淺談Java中replace與replaceAll區(qū)別
- Java中replace、replaceAll和replaceFirst函數(shù)的用法小結(jié)
- 淺談java中replace()和replaceAll()的區(qū)別
- jQuery中replaceAll()方法用法實(shí)例
- js使用正則實(shí)現(xiàn)ReplaceAll全部替換的方法
- js字符串替換所有的指定字符或文字(推薦replaceAll方法)
- JS中實(shí)現(xiàn)replaceAll的方法(實(shí)例代碼)
- js replace 與replaceall實(shí)例用法詳解
- Flex 字符串ReplaceAll使用說(shuō)明
- JavaScript中使用replace結(jié)合正則實(shí)現(xiàn)replaceAll的效果
相關(guān)文章
iframe的onload在Chrome/Opera中執(zhí)行兩次Bug的解決方法
創(chuàng)建iframe對(duì)象,添加load事件, 再將iframe添加到body中。Chrome/Opera中會(huì)造成load事件的handler執(zhí)行兩次。2011-03-03實(shí)例詳解JSON取值(key是中文或者數(shù)字)方式
本文通過(guò)實(shí)例詳解JSON取值(key是中文或者數(shù)字)方式,非常不錯(cuò),具有參考借鑒價(jià)值,需要的的朋友參考下吧2017-08-08JavaScript函數(shù)Call、Apply原理實(shí)例解析
這篇文章主要介紹了JavaScript函數(shù)Call、Apply原理實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-02-02