我正在尝试过滤包含一堆 url 的数组。我需要返回仅包含“联系人”一词的网址。
例如有一个链接 https://www.example.com/v1/contact-us/ca
这应该从过滤器返回。
我试过这个:
const regex = new RegExp("/\bcontact\b", 'g' )
sites.links.filter((val) => {
console.log(regex.test(val.href))
})
当我知道有一个域包含“联系人”一词时,它目前只是通过所有域发回假消息。
原文由 Dileet 发布,翻译遵循 CC BY-SA 4.0 许可协议
首先
new RegExp('/\bcontact\b', 'g');
相当于/\/@contact@/g
其中@
是退格字符(ASCII 08)……显然不是什么08所以,你会做
new RegExp('/\\bcontact\\b', 'g');
这相当于/\/\bcontact\b/g
但是,
\\b
之后的/
是多余的所以…下降到
/\/contact\b/g
使用
string.match
这里作为regex.test
被滥用。下面是说明下一个问题是在带有
g
标志的regexp.test
中多次使用 ONE 正则表达式。每次调用时,它将从下一个indexOf
之前找到的子字符串开始查找,并在同一类型的字符串上连续调用,它基本上将返回true
,false
,true
,false
。如果你想使用
regex.test
,那么不要重复使用相同的正则表达式,除非你知道这样做的后果或者不使用g
标志(这里你不需要)