我在 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 对象(例如re = new RegExp('\\bcat', 'gi')
在 for 循环内),它会按预期工作并返回所有数组项,但我真的宁愿不每次通过都必须这样做。
我对正则表达式不太熟悉 - 这是我的正则表达式的问题吗?我忘记了分隔符还是什么?或者它只是另一个 JS 怪癖?