首頁 > web前端 > js教程 > 為什麼在 JavaScript 的正規表示式中組合「g」和「i」標誌會產生意外的結果?

為什麼在 JavaScript 的正規表示式中組合「g」和「i」標誌會產生意外的結果?

Susan Sarandon
發布: 2024-12-28 10:02:27
原創
355 人瀏覽過

Why Does Combining the `g` and `i` Flags in JavaScript's RegExp Produce Unexpected Results?

RegExp:意外標誌組合的情況

使用正規表示式 (RegEx) 時,了解各種標誌對配對行為的影響至關重要。當同時使用全域 (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'));
登入後複製

預期結果:[true, true]

實際結果結果結果:[true, false]

解釋:

RegEx 物件中的 g 標誌可以從最後找到的索引繼續匹配。這意味著找到第一個匹配項後,後續測試將從緊接著上一個匹配項的字元開始繼續搜尋。當模式涉及相同子字串的多個實例時,此行為可能會導致意外結果。

在我們的範例中,初始匹配發生在「Foo Bar」的第一個字元處。然而,第二個測試(沒有 g 標誌)從字串的開頭重新啟動匹配過程,儘管在「Foo」的下一個實例處出現了預期的匹配,但結果卻是錯誤的。

正在解決問題:

要緩解此問題,請考慮使用RegEx 物件的lastIndex 屬性來手動控制每個測試的起始索引,如下所示範例:

var query = 'Foo B';
var re = new RegExp(query, 'gi');
console.log(re.lastIndex);

console.log(re.test('Foo Bar'));
console.log(re.lastIndex);

re.lastIndex = 0;
console.log(re.test('Foo Bar'));
console.log(re.lastIndex);
登入後複製

此方法允許更可預測的匹配行為,確保每次都針對整個字串評估模式。

以上是為什麼在 JavaScript 的正規表示式中組合「g」和「i」標誌會產生意外的結果?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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