当我使用全局标志和大小写不敏感标志时,这个正则表达式有什么问题?查询是用户生成的输入。结果应该是[真,真]。
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]
var reg = /^a$/g;
for(i = 0; i++ < 10;)
console.log(reg.test(“a”));
您正在使用一个RegExp对象并多次执行它。在每次连续执行时,它都从最后一个匹配索引开始。
你需要在每次执行前“重置”正则表达式,从头开始:
result.push(re.test('Foo Bar'));
re.lastIndex = 0;
result.push(re.test('Foo Bar'));
// result is now [true, true]
话虽如此,每次创建一个新的RegExp对象可能更具可读性(开销很小,因为RegExp是缓存的):
result.push((/Foo B/gi).test(stringA));
result.push((/Foo B/gi).test(stringB));