P粉3990907462023-08-23 00:35:02
您正在使用一個RegExp
對象,並且多次執行它。在每次執行時,它都會從上次匹配的索引繼續。
在每次執行之前,您需要「重設」正規表示式以從頭開始:
result.push(re.test('Foo Bar')); re.lastIndex = 0; result.push(re.test('Foo Bar')); // 现在的结果是 [true, true]
話雖如此,每次建立一個新的RegExp物件可能更易讀(開銷很小,因為RegExp已經被快取):
result.push((/Foo B/gi).test(stringA)); result.push((/Foo B/gi).test(stringB));
P粉5233350262023-08-23 00:21:13
使用帶有g
標誌的RegExp
物件會追蹤匹配發生的lastIndex
,因此在後續的匹配中,它將從上次使用的索引開始,而不是從0 開始。看一下範例:
var query = 'Foo B'; var re = new RegExp(query, 'gi'); console.log(re.lastIndex); console.log(re.test('Foo Bar')); console.log(re.lastIndex); console.log(re.test('Foo Bar')); console.log(re.lastIndex);