使用由变量组成的正则表达式进行测试

时间:2017-09-09 10:02:01

标签: javascript

这个javascript代码应该过滤一个数组,只返回其中包含2个字符串的项,字符串在变量中,但它会过滤掉所有预期返回的匹配项。知道如何修复它以便它返回包含变量中文本的项目吗?感谢

let var1 = '234A'
let var2 = '1.4'

// examples of items
let myArr = ['it has 234AB but with 1.4 factors', 'it is 234 and 1.5'];

// need to return 'it has 234 but with 1.4 factors'
return myArr.filter(y => new RegExp('/' + var1 + '.*?' + var2.replace('.','\.') + '/', 'i').test(y))

1 个答案:

答案 0 :(得分:2)

使用RegExp构造函数创建正则表达式时,不应在字符串中添加/。这些仅用于正则表达式文字,而不是字符串。

'.'替换'\.'没有用,因为反斜杠由字符串文字解释而对RegExp构造函数不可见。你应该加倍反斜杠。这样字符串将有一个文字反斜杠,RegExp构造函数可以看到它。

但还有另一个限制。正如您现在所看到的那样,事件必须按顺序排列,因此当它们以相反的顺序发生时它不会检测到项目。

为什么不使用includes&&

myArr.filter(y => y.includes(var1) && y.includes(var2))