JS全域性正則表示式匹配同一字串結果不一致
阿新 • • 發佈:2019-01-23
示例
var regex = /^\d*$/g;
var s = '2333';
console.log(regex.test(s));
console.log(regex.lastIndex);
console.log(regex.test(s));
console.log(regex.lastIndex);
console.log(regex.test(s));
console.log(regex.lastIndex);
console.log(regex.test(s));
console.log(regex.lastIndex);
執行結果:
問題
看上面執行結果,可以發現,全域性正則表示式多次匹配同一字串,返回的結果不一致。
原因
原因出在全域性正則表示式的 全域性 這一屬性上,正則表示式若是設定了全域性匹配,則該正則表示式的 lastIndex
屬性會在匹配時變化如下:
- 匹配成功時, lastIndex
屬性值會被設定為:匹配成功的子字串的最後一個字元,在原字串中的索引值再加1。若再次利用該正則對字串進行匹配,它以 lastIndex
屬性值作為匹配的起點,先後進行匹配。
- 匹配失敗時, lastIndex
屬性值會被設定為0。
綜上所述,同一正則多次匹配同一字串結果不一致的問題就不難理解了
解決對同一字串匹配結果不一致問題
- 方式一:不設定正則的全域性屬性
- 方式二:若正則必須要使用全域性屬性,在每一次匹配之後,手動將正則的
lastIndex