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);