首頁  >  文章  >  後端開發  >  詳談lastIndex對正規結果的影響

詳談lastIndex對正規結果的影響

小云云
小云云原創
2017-12-06 13:30:531561瀏覽

用正規表示式去檢查同一個字串時,交替回傳true和false。無奈之下,重新翻了翻權威指南,發現罪魁禍首原來是lastIndex。本文就和大家分享一下lastIndex對正規結果的影響。

let reg = /[\d]/g
//undefined
reg.test(1)
//true
reg.test(1)
//false


lastIndex

#lastIndex在權威指南中是如下解釋:它是一個可讀/寫的整數。如果匹配模式帶有g修飾符,這個屬性儲存在整個字串中下次索引的開始位置,這個屬性會被exec()和test()用到。還是上面的例子,觀察下lastIndex屬性


let reg = /[\d]/g  //有修饰符g
//undefined
reg.lastIndex
//0
reg.test(1)   
//true
reg.lastIndex  //匹配一次后,lastIndex改变
//1
reg.test(1)  //从index 1 开始匹配
//false
reg.lastIndex
//0
reg.test(1)
//true
reg.lastIndex
//1


第一次使用test()匹配成功後,lastIndex被設為匹配到的結束位置,就是1;第二次再test()時,從index 1 開始匹配,匹配失敗,lastIndex重置為0 。這樣就造成了符合結果與預期不符

解決

#1、不使用g 修飾符


reg = /[\d]/
///[\d]/
reg.test(1)
//true
reg.test(1)
//true
reg.lastIndex
//0
reg.test(1)
//true
reg.lastIndex


2、test()之後手動設定lastIndex = 0

以上內容就是lastIndex對正規結果的影響,希望能幫助大家。

相關推薦:

詳解JavaScript中數組和字串的lastIndexOf()方法使用_基礎知識

indexOf 和 lastIndexOf 使用範例介紹_javascript技巧

js lastIndexOf() 用法實例

以上是詳談lastIndex對正規結果的影響的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn