問題:
使用🎜>問題:
使用正規表示式時全域標誌(g)和不區分大小寫標誌(i),為什麼測試方法會對使用者產生的結果產生錯誤的結果輸入?
範例:
var query = 'Foo B'; var re = new RegExp(query, 'gi'); var result = []; result.push(re.test('Foo Bar')); result.push(re.test('Foo Bar')); // result will be [true, false]
考慮以下程式碼:
預期結果:[true, true]
解釋:
A帶有g 標誌的RegExp物件維護 lastIndex 屬性,指示最後一個符合的位置。當重複呼叫測試方法而不重置lastIndex時,它將從上次使用的索引開始恢復搜索,而不是從0開始。
var query = 'Foo B'; var re = new RegExp(query, 'gi'); console.log(re.lastIndex); // 0 console.log(re.test('Foo Bar')); // true console.log(re.lastIndex); // 6 console.log(re.test('Foo Bar')); // false console.log(re.lastIndex); // 6
示範:
在上面的範例中,第一次呼叫 test 將 lastIndex 設為 6。隨後,第二次呼叫從索引 6 恢復搜索,這會導致 false,因為搜尋範圍為僅限於上一場比賽之後的字元。以上是為什麼 RegExp 的 `test()` 方法會傳回帶有全域和不區分大小寫標誌的意外結果?的詳細內容。更多資訊請關注PHP中文網其他相關文章!