Javascript中正则表达式的全局匹配模式
??? 先看一道JavaScript題目,據(jù)說是國內(nèi)某知名互聯(lián)網(wǎng)企業(yè)的JavaScript筆試題,如果對正則的全局匹配模式不了解的話可能會對下面的輸出結果感到疑惑。
View Code 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)建正則表達式對象時如果使用了“g”標識符或者設置它了的global屬性值為ture時,那么新創(chuàng)建的正則表達式對象將使用模式對要將要匹配的字 符串進行全局匹配。在全局匹配模式下可以對指定要查找的字符串執(zhí)行多次匹配。每次匹配使用當前正則對象的lastIndex屬性的值作為在目標字符串中開 始查找的起始位置。lastIndex屬性的初始值為0,找到匹配的項后lastIndex的值被重置為匹配內(nèi)容的下一個字符在字符串中的位置索引,用來 標識下次執(zhí)行匹配時開始查找的位置。如果找不到匹配的項lastIndex的值會被設置為0。當沒有設置正則對象的全局匹配標志時lastIndex屬性的值始終為0,每次執(zhí)行匹配僅查找字符串中第一個匹配的項。可以通下面的代碼來查看在執(zhí)行匹配相應的lastIndex 屬性的值。
View Code 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
關于RegExp.prototype.exec(str)方法和String.prototype.math(rgExp)方法
??? 正則對象的test方法返回值為true或flase,在僅需要檢測目標字符串與指定模式是否匹配,但不需要獲取匹配內(nèi)容時這個方法非常有用。當需要獲取 匹配結果時就需要用RegExp類型的exec(str)方法或String類型的match(rgExp)方法。
??? RegExp.prototype.exec(str)方法返回NULL或返會一個數(shù)組,在數(shù)組的第0個元素存放的是在字符串str中查找到的匹配內(nèi)容,1到n個元素返回的是在模式中使用括號"()"指定的子匹配項的內(nèi)容。
??? 在沒有使用全局標志時String.prototype.math(rgExp)方法和RegExp.prototype.exec(str)的行為類 似。當設置了全局匹配標志時String.prototype.math(rgExp)方法返回的數(shù)組項元素0到n中包含了所有匹配到的項不包含子匹配 項。這時可以使用RegExp.$1..$9獲取9個子匹配。
轉(zhuǎn)載于:https://www.cnblogs.com/rentj1/archive/2011/04/26/2029872.html
總結
以上是生活随笔為你收集整理的Javascript中正则表达式的全局匹配模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Muduo 网络编程示例之五: 测量两台
- 下一篇: Java程序设计 图形用户界面 小巫版简