JS使用正则表达式过滤数组返回全部元素的问题如何解决
问题原因
你代码的核心错误是正则表达式的定义不符合JS语法规则:
你将正则规则包裹在了双引号中,使其变成了普通字符串,而非JS可识别的正则对象:
// 错误写法:正则被双引号包裹成了普通字符串 const alertRegEx = "/.*current balance.*above.*/"
当String.match()方法接收字符串类型的参数时,会自动将其隐式转换为正则对象,此时你写在首尾的/会被当成匹配内容的一部分,而非正则的边界标识,自然无法得到正确的过滤结果。
修正方案
有两种正确的正则定义方式可选:
方式1:使用正则字面量(推荐)
直接去掉外层的双引号即可,JS会自动将/包裹的内容识别为正则对象:
const alertRegEx = /.*current balance.*above.*/ const alert = alertTypes.filter(alert => alert.match(alertRegEx))
方式2:使用RegExp构造函数
如果你要使用字符串形式定义正则,需要去掉首尾的/,再传入RegExp构造函数:
const alertRegEx = new RegExp(".*current balance.*above.*") const alert = alertTypes.filter(alert => alert.match(alertRegEx))
运行结果
修正后过滤得到的alert值为:
["Alert me when this account’s current balance goes above $1."]
完全符合预期匹配需求。
内容的提问来源于stack exchange,提问作者Octane
相关产品推荐
相关产品推荐

