這篇文章主要為大家展示了“如何解決js相同正則多次調用test()返回的值卻不同的問題”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“如何解決js相同正則多次調用test()返回的值卻不同的問題”這篇文章吧。
代碼是這樣的:
var reg = /^1[345678][0-9]{9}$/g;
console.log(reg.test(15328044636));
console.log(reg.test(15328044636));會發現控制臺打印的數據卻是:
true false
問題原因
這是因為正則reg的g屬性,設置的全局匹配。RegExp有一個lastIndex屬性,來保存索引開始位置。
上面的問題,第一次調用的lastIndex值為0,到了第二次調用,值變成了11。
var reg = /^1[345678][0-9]{9}$/g;
console.log(reg.lastIndex, reg.test(15328044636));
console.log(reg.lastIndex, reg.test(15328044636));
//打印的值
0 true
11 false解決方案
第一種方案是將g去掉,關閉全局匹配。
第二種就是在每次匹配之前將lastIndex的值設置為0。
var reg = /^1[345678][0-9]{9}$/g;
console.log(reg.lastIndex, reg.test(15328044636));
reg.lastIndex = 0;
console.log(reg.lastIndex, reg.test(15328044636));
//打印的值
0 true
0 true以上是“如何解決js相同正則多次調用test()返回的值卻不同的問題”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。