一連のURLを含む配列をフィルタリングしようとしています。 「連絡先」という単語のみを含む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))
})
現在、「連絡先」という単語を含むドメインが1つあることがわかっている場合、すべてのドメインを通じて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);
_
次の問題は、_regexp.test
_でg
フラグを使用して、1つの正規表現を複数回使用することです。呼び出しごとに、次の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);
_
質問は正規表現を要求していることを理解していますが、ここでの賢明な答えは
someArray.filter(str => str.includes('contact'))
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)
これを試して。うまくいくはずです。