正則表達式的全局匹配模式


首先,要明確一點,所有的正則表達式都有一個lastIndex屬性,用於記錄上一次匹配結束的位置。如果不是全局匹配模式,那lastIndex的值始終為0,在匹配過一次后,將會停止匹配。

正則表達式的全局匹配模式,就是在創建正則表達式的時候使用g標識符或者將global屬性設置為true,在全局匹配模式下,正則表達式會對指定要查找的字符串執行多次匹配。每次匹配使用當前正則對象的lastIndex屬性的值作為在目標字符串中開始查找的起始位置。如果找不到匹配的項lastIndex的值會被重新設置為0。

理解了上面的話,下面代碼的結果就很清晰了:

 1 var regex = /abc/g;
 2 var str = '123#abc';
 3 console.log(regex.lastIndex);   // 0
 4 console.log(regex.test(str));   // true
 5 console.log(regex.lastIndex);   // 7
 6 console.log(regex.test(str));   // false
 7 console.log(regex.lastIndex);   // 0
 8 console.log(regex.test(str));   // true
 9 console.log(regex.lastIndex);   // 7
10 console.log(regex.test(str));   // false

今天在寫表單驗證的時候遇到一個問題,每當偶數次點擊的時候就會報錯,就是這個問題造成的,解決方法也很簡單,就是去掉正則表達式里面的g。

 

 

關於RegExp.prototype.exec(str)方法和String.prototype.math(rgExp)方法:

RegExp.prototype.exec(str)方法返回NULL或返會一個數組,在數組的第0個元素存放的是在字符串str中查找到的匹配內容,1到n個元素返回的是在模式中使用括號"()"指定的子匹配項的內容。

在沒有使用全局標志時String.prototype.math(rgExp)方法和RegExp.prototype.exec(str)的行為類 似。當設置了全局匹配標志時String.prototype.math(rgExp)方法返回的數組項元素0到n中包含了所有匹配到的項不包含子匹配 項。這時可以使用RegExp.$1..$9獲取9個子匹配。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM