我在JS中看到了一些奇怪的RegExp对象行为。我尝试将查询字符串与搜索自动完成功能的单词开头匹配。当遍历名称数组并返回匹配项时,正则表达式仅匹配每个预期匹配项的另一半。
var words = [
"catherine",
"caterpillar",
"nice catch",
"fat cat",
"catalina"
],
re = new RegExp('\\bcat', 'gi'),
matches = [],
results, i;
for (i=0; i<words.length; i++) {
if (re.exec(words[i])) {
matches.push(words[i]);
}
}
console.log(matches);
这段代码返回
["catherine", "nice catch", "catalina"]
。无论元素的顺序如何,行为都是相同的。如果我在每次迭代中重新创建这个RegExp对象(例如,在for循环内部使用re = new RegExp('\\bcat','gi')
),它就像预期的那样返回所有数组项,但我真的不想在每次迭代中都这样做。我对正则表达式不太熟悉 - 这是我的正则表达式有问题吗?我是否忘记了分隔符或其他什么东西?还是这只是另一个JS的怪癖?