我正在尝试过滤包含一堆网址的数组。我需要返回仅包含“contact”一词的网址。
例如,有一个链接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))
})
当我知道有一个域包含“联系人”这个词时,它当前只是通过所有域发回false。
答案 0 :(得分:14)
首先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);
下一个问题是在regexp.test
g
标志中多次使用ONE正则表达式。对于每次调用,它将从下一个indexOf
先前找到的子字符串开始查看,并且对同一类型字符串进行连续调用,它基本上将返回true
,false
,true
,false
。
如果您想使用regex.test
,请不要重复使用相同的正则表达式,除非您知道这样做的后果或不使用g
标记(此处不是需要)
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);

答案 1 :(得分:3)
您需要从Sub Count_Selection()
Dim cell As Object
Dim count As Integer
count = 0
For Each cell In Selection
count = count + 1
Next cell
MsgBox count & " item(s) selected"
End Sub
函数返回真值/错误结果。
filter

答案 2 :(得分:1)
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)
试试这个。它应该工作。
答案 3 :(得分:1)
我意识到这个问题要求使用正则表达式,但是这里的明智答案是
someArray.filter(str => str.contains('contact'))
答案 4 :(得分:1)
const regex = new RegExp('/contact\\b', 'g');
const matchedSites = sites.links.filter(e =>
regex.test(e.href));
console.log(matchedSites);