lastIndex對正則結果的影響

2022-05-14 09:57:36 字數 1093 閱讀 6332

今天遇到乙個問題,用正規表示式去檢查同乙個字串時,交替返回true和false。無奈之下,重新翻了翻權威指南,發現罪魁禍首原來是lastindex。可在控制台嘗試下

let reg = /[\d]/g

//undefined

reg.test(1)//

true

reg.test(1)//

false

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

0

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

正則的lastIndex 屬性

簡介 正則的lastindex 屬性用於規定下次匹配的起始位置。注意 該屬性只有設定標誌 g 才能使用。上次匹配的結果是由方法 regexp.exec 和 regexp.test 找到的,它們都以 lastindex 屬性所指的位置作為下次檢索的起始點。這樣,就可以通過反覆呼叫這兩個方法來遍歷乙個字...

正則的lastIndex 屬性

簡介 正則的lastindex 屬性用於規定下次匹配的起始位置。注意 該屬性只有設定標誌 g 才能使用。上次匹配的結果是由方法 regexp.exec 和 regexp.test 找到的,它們都以 lastindex 屬性所指的位置作為下次檢索的起始點。這樣,就可以通過反覆呼叫這兩個方法來遍歷乙個字...

String對正則的支援

1.匹配結果 boolean matches string regex 值得注意的是 matches匹配是完全匹配,即測試字串和表示式必須完全一致才返回true,而pattern.compile regex matcher input find 中regex是input的真子集也會返回true。2....