2

我正在尝试在浏览器的时尚插件上使用正则表达式来匹配网站。

此正则表达式需要匹配一个域(我们将其命名website.com

这就是它应该如何工作:

  • 允许的任何子域
  • http 或 https 也是
  • website.com/team* => 不允许
  • website.com/forum* => 不允许
  • website.com* => 允许

从字面上看,这意味着它应该适用于网站的任何页面,但在 .com 之后与 /team 或 /forum 的任何链接都不起作用。

我试过了

((\w+)*\.\w{2,6})(\/)(?!team|forum)([^\s]+)

但它不起作用,我不知道如何使它只匹配域website.com

还有一个问题,这种正则表达式是否适用于 Stylish?我在 Google 上没有找到任何关于它的信息

4

3 回答 3

0

function Test_1(path){
return /^(https|http)(:\/\/)(www\.|)((?!website)[\w]*?\.|)website\.com((\/)|(\/)((?!forum\/|team\/).*?)|)$/gi.test(path);
}

console.log(Test_1('http://website.com'));
console.log(Test_1('https://www.website.com'));
console.log(Test_1('http://websit.website.com'));
console.log(Test_1('http://websit.website.com/'));
console.log(Test_1('http://websit.website.com/seeg/yukyuk'));

console.log('--------------------------');
console.log('---[Other domain]--------');
console.log('--------------------------');

console.log(Test_1('http://website5.com'));
console.log(Test_1('https://www.website5.com'));
console.log(Test_1('http://websit.website5.com'));
console.log(Test_1('http://websit.website5.com/'));
console.log(Test_1('http://websit.website5.com/seeg/yukyuk'));

console.log('--------------------------');
console.log('---[forum domain]--------');
console.log('--------------------------');

console.log(Test_1('http://website.com/forum'));
console.log(Test_1('http://website.com/forum/'));
console.log(Test_1('http://website.com/forum/rgrg/'));
console.log(Test_1('http://website.com/3forum/rgrg/'));
console.log(Test_1('http://website.com/forum5/rgrg/'));

console.log('--------------------------');
console.log('---[forum subdomain]------');
console.log('--------------------------');

console.log(Test_1('http://websit.website.com/forum'));
console.log(Test_1('http://websit.website.com/forum/'));
console.log(Test_1('http://websit.website.com/forum/rgrg/'));
console.log(Test_1('http://websit.website.com/3forum/rgrg/'));
console.log(Test_1('http://websit.website.com/forum5/rgrg/'));


console.log('--------------------------');
console.log('---[team domain]---------');
console.log('--------------------------');

console.log(Test_1('http://websit.website.com/team'));
console.log(Test_1('http://websit.website.com/team/'));
console.log(Test_1('http://websit.website.com/team/rgrg/'));
console.log(Test_1('http://websit.website.com/3team/rgrg/'));
console.log(Test_1('http://websit.website.com/team5/rgrg/'));


console.log('--------------------------');
console.log('---[team subdomain]-------');
console.log('--------------------------');


console.log(Test_1('http://websit.website.com/team'));
console.log(Test_1('http://websit.website.com/team/'));
console.log(Test_1('http://websit.website.com/team/rgrg/'));
console.log(Test_1('http://websit.website.com/3team/rgrg/'));
console.log(Test_1('http://websit.website.com/team5/rgrg/'));

于 2019-04-07T11:50:38.110 回答
0

\w{2,6}不匹配,website因为它包含 7 个字符。最后([^\s]+不匹配空白字符的字符类可以使用 0+ 次的量词,*当没有尾随正斜杠时也可以匹配。

如果您想匹配 website.com,您也可以匹配该.com部分,否则[^\s]*将匹配 url 的其余部分。

正斜杠应该是负前瞻的一部分,因为这是您不希望直接位于右侧的字符串。

您的模式可能如下所示:

\b(?:https?:\/\/)?(?:\w+\.)*website\.com(?!\/team|\/forum)\S*

那将匹配

  • \b(?:https?:\/\/)?字边界后跟可选的 http(s)://
  • (?:\w+\.)*匹配 0+ 次 1+ 个单词字符,后跟一个点
  • website\.com匹配 website.com
  • (?!\/team|\/forum)否定前瞻断言右边的内容不是 /team 或 /forum
  • \S*匹配 0+ 次非空白字符

正则表达式演示

于 2019-04-07T09:23:21.193 回答
0

检查以下正则表达式,

(https?:\/\/)?(www.website.com)(\/)?(?!team|forum)(\w)*

单击此处进行演示。在这里您可以找到正则表达式的每个部分都已被分解以供您理解

此正则表达式在以下测试用例上进行了测试

  1. www.website.com = 允许
  2. https://www.website.com = 允许
  3. http://www.website.com = 允许https://www.website.com/team = 不允许
  4. https://www.website.com/forum = 不允许
  5. https://www.website.com/samplepage = 允许
于 2019-04-07T10:21:41.490 回答