1. 程式人生 > >JS全域性正則表示式匹配同一字串結果不一致

JS全域性正則表示式匹配同一字串結果不一致

示例

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
    屬性值設定為0。