这个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))
答案 0 :(得分:2)
使用RegExp
构造函数创建正则表达式时,不应在字符串中添加/
。这些仅用于正则表达式文字,而不是字符串。
用'.'
替换'\.'
没有用,因为反斜杠由字符串文字解释而对RegExp构造函数不可见。你应该加倍反斜杠。这样字符串将有一个文字反斜杠,RegExp构造函数可以看到它。
但还有另一个限制。正如您现在所看到的那样,事件必须按顺序排列,因此当它们以相反的顺序发生时它不会检测到项目。
为什么不使用includes
和&&
?
myArr.filter(y => y.includes(var1) && y.includes(var2))