JS正则表达式跳过每隔一个匹配
JS regex skips every other match
我看到JS中的RegExp对象有一些奇怪的行为。我正在尝试将查询字符串与搜索自动完成函数的单词开头进行匹配。当迭代一个名称数组并返回匹配项时,regex只会命中其他所有期望的匹配项。
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的另一个怪癖?
在RegExp对象上调用exec
时,它会维护一个lastIndex
属性,该属性包含正则表达式与字符串匹配的上一个索引。下次尝试使用exec
进行匹配时,它只会开始查看索引lastIndex + 1
,即使您在不同的字符串中进行搜索也是如此。
为了防止这种情况,可以在循环的每次迭代中将re.lastIndex
设置为-1
,或者在创建RegExp时只删除全局标志。
Javascript怪癖:P
http://www.w3schools.com/jsref/jsref_regexp_g.asp
相关文章:
- 一个正则表达式,用于从JS中的HTML标记中删除id、样式和类属性
- 如何生成一个正则表达式,用以这种方式命名的类的属性值替换标记{{name}}
- 我该如何编写一个正则表达式来捕获具有特定类的HTML表
- 我该如何编写一个正则表达式来匹配字符串后面的值(到下一个逗号)
- 如何创建一个正则表达式来拆分行,除非有斜杠
- 如何编写一个正则表达式,匹配除左括号和右括号以及它们之间的任何内容之外的所有内容
- 需要一个正则表达式来过滤掉除一个小数点之外的所有内容
- 寻找一个正则表达式来解析 JS 的参数字符串
- Javascript 匹配一个正则表达式,但不匹配另一个
- Javascript 正则表达式:无论如何都可以编写一个正则表达式,如果反向引用不匹配,则给出 true
- 使用一个正则表达式分析复杂字符串
- 找到一个正则表达式来检查字母,汉字和斜杠(/)
- 需要一个正则表达式,该表达式除了AlphaNumeric _-()之外.和javascript中的空格
- 我该如何编写一个正则表达式来接受任何输入字符串并只输出字母
- JS中的一个正则表达式
- 您将如何构建一个正则表达式,将段落拆分为句子,但不拆分<>内的任何标点符号
- 动态地为ng-pattern创建一个正则表达式,仅用于范围内的数字
- 如何匹配一个正则表达式,如果它完全匹配
- 需要一个正则表达式,确保数字以01 02或08开头,长度为10或11位
- Javascript将一个正则表达式字符串转换为一个类型对象