首頁 > web前端 > js教程 > 為什麼 RegExp 的 `test()` 方法會傳回帶有全域和不區分大小寫標誌的意外結果?

為什麼 RegExp 的 `test()` 方法會傳回帶有全域和不區分大小寫標誌的意外結果?

Barbara Streisand
發布: 2024-12-24 20:37:17
原創
277 人瀏覽過

Why Does RegExp's `test()` Method Return Unexpected Results with Global and Case-Insensitive Flags?

使用全域標誌和不區分大小寫標誌的正規表示式會產生意外結果

問題:

使用🎜>問題:

使用正規表示式時全域標誌(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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板