【问题标题】:Global RegExp and arrays全局正则表达式和数组
【发布时间】:2020-09-10 01:40:52
【问题描述】:

为什么这不像(我)预期的那样工作?

var re = /blah/gi;
console.log([
  'blah-1',
  'blah-2'
].filter(i => re.test(i)))

// expected ["blah-1"], ["blah-2"]
// returns only ["blah-1"]

如果我删除全局标志,它会同时返回。

var re = /blah/i;
console.log([
  'blah-1',
  'blah-2'
].filter(i => re.test(i)))

如果我不使用变量,它也可以工作

console.log([
  'blah-1',
  'blah-2'
].filter(i => /blah/gi.test(i)))

【问题讨论】:

标签: javascript arrays regex


【解决方案1】:

您不应该重用正则表达式,因为RegularExpression#test 修改了全局正则表达式的状态;也就是说,它会将lastIndex 属性推进到当前匹配之后。相反,您可以使用 String#match 或在每次迭代时重新创建正则表达式。

var re = /blah/gi;
console.log([
  'blah-1',
  'blah-2'
].filter(i => i.match(re)));

【讨论】:

    猜你喜欢
    • 2013-11-23
    • 1970-01-01
    • 2011-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多