Apify:PseudoUrl 正则表达式以匹配包含给定关键字的网址

Apify: PseudoUrl regex to match urls containing a given keyword

Apify PseudoUrl 支持 JavaScript 风格的正则表达式来匹配 URL。

我尝试按照 RegEx 来匹配包含特定关键字的所有 url -

//not working
http://www.example.com/[*foo*]

例如,如果网站有以下链接:

http://www.example.com/pages/
http://www.example.com/pages/bar

http://www.example.com/pages/foo/bar.html
http://www.example.com/pages/test-foo-test.html
http://www.example.com/pages/foo.html

正则表达式应匹配最后 3 个网址。但是,正则表达式不起作用。

您需要检查 foo 域内容之后的任何位置是否存在:

http:\/\/www\.example\.com\/.*foo

https://regex101.com/r/UlSb4w/2

您还将常规 javascript 正则表达式传递给 PseudoUrl 构造函数。

您需要 ^http:\/\/www.example.com\/pages\/.*foo.

形式的正则表达式

假设您想对多个关键字执行此操作,您可以使用如下内容:

const Apify = require('apify');
const regexEscape = require('regex-escape');

function createKeywordUrlRegex(baseUrl, keyword) {
  const regexStr = `^${regexEscape(baseUrl)}.*?${regexEscape(keyword)}`;
  // remove the i if you want to match to be case-sensitive
  return new RegExp(regexStr, 'i');
}

const purl = new Apify.PseudoUrl(createKeywordUrlRegex('http://www.example.com/pages/', 'foo'));

// print out the examples
const examples = [
'http://www.example.com/pages/',
'http://www.example.com/pages/bar',
'http://www.example.com/pages/foo/bar.html',
'http://www.example.com/pages/test-foo-test.html',
'http://www.example.com/pages/foo.html'
];
for(let example of examples)
  console.log(example, purl.matches(example) ? 'MATCH!' : 'IGNORED');

您可以将 http://www.example.com/pages/ 之类的基础 url 和 foo 之类的关键字传递给 createKeywordUrlRegex,它会为您生成上面提到的正则表达式。