今天遇到乙個問題,用正規表示式去檢查同乙個字串時,交替返回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....