Dil*_*eet 9 javascript regex node.js
我正在尝试过滤包含一堆网址的数组.我需要返回仅包含"联系人"一词的网址.
例如,有一个链接 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))
})
Run Code Online (Sandbox Code Playgroud)
它当前只是通过所有域发回false,当我知道有一个域包含单词"contact"时.
Jar*_*a X 17
首先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);
Run Code Online (Sandbox Code Playgroud)
下一个问题是在a中多次使用ONE正则表达式 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 correctRegex = new RegExp('/contact\\b');
const matchedSitesFailed = sites.links.filter(({href}) => regex.test(href));
const matchedSitesSuccess = sites.links.filter(({href}) => new RegExp('/contact\\b', 'g').test(href));
const matchedSitesSuccess2 = sites.links.filter(({href}) => correctRegex.test(href));
console.log('failed returns:', matchedSitesFailed.length);
console.log('success returns:', matchedSitesSuccess.length);
console.log('success returns 2:', matchedSitesSuccess2.length);Run Code Online (Sandbox Code Playgroud)
Joh*_*and 13
我意识到这个问题需要正则表达式,但这里的明智答案是
someArray.filter(str => str.includes('contact'))
Run Code Online (Sandbox Code Playgroud)
您需要从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);Run Code Online (Sandbox Code Playgroud)