ES6用Regex过滤一个数组

我试图过滤包含一堆url的数组。 我需要返回只包含单词“联系人”的url。

例如,有一个链接https://www.example.com/v1/contact-us/ca

这应该从filter返回。

我试过这个:

  const regex = new RegExp("/\bcontact\b", 'g' ) sites.links.filter((val) => { console.log(regex.test(val.href)) }) 

当我知道有一个域包含单词“contact”时,它现在只是通过所有域返回false。

首先new RegExp('/\bcontact\b', 'g'); 相当于/\/@contact@/g ,其中@是退格字符(ASCII 08)…显然不是你想要的

所以,你会做new RegExp('/\\bcontact\\b', 'g'); – 这相当于/\/\bcontact\b/g

然而, \\b之后/是多余的

所以…到/\/contact\b/g

在这里使用string.match,由于滥用下面描述的regex.test

 var sites = { links: [ {href: 'https://www.example.com/v1/contact-us/ca'}, {href: 'https://www.example.com/v1/contact-us/au'}, {href: 'https://www.example.com/v1/contact-us/us'}, {href: 'https://www.example.com/v1/dontcontact-us/us'} ] }; const regex = new RegExp('/contact\\b', 'g'); const matchedSites = sites.links.filter(({href}) => href.match(regex)); console.log(matchedSites); 

您需要从filter函数返回真/假结果。

 const regex = new RegExp("/\b?contact\b?", 'g'); const sites = { links: [{ href: 'http://www.some-site.com/contact-us' }, { href: 'http://www.some-site.com/about' }, { href: 'http://www.some-site.com/admin' } ] } const fitered = sites.links.filter((link) => { return link.href.match(regex); }); console.log(fitered); 
 var links = ["https://www.example.com/v1/contact-us/ca", "https://www.example.com/v1/contact-us/sanjose", "https://www.example.com/v1/meeting-us/ca"]; var newlink = links.filter(function(link){ return link.includes("contact") }); console.log(newlink) 

尝试这个。 它应该工作。