代碼是這樣的:
var reg = /^1[345678][0-9]{9}$/g;console.log(reg.test(15328044636));console.log(reg.test(15328044636));會發現控制臺打印的數據卻是:
truefalse
問題原因
這是因為正則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 true11 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 true0 true以上這篇解決js相同的正則多次調用test()返回的值卻不同的問題就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持武林網。
新聞熱點
疑難解答