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)
尝试这个。 它应该工作。