使用正则表达式

时间:2019-01-30 11:05:53

标签: javascript regex

我有这个正则表达式(使用javascript),用于检测域中的任何URL,但没有一个包含“ mysite”(又称为“ example”,因为stackoverflow过滤器)的URL。

(?<protocol>\w+s?:\/\/)?(?<subdomain>\w+\.)(?<domain>(?!example)(\w+))(?<tls>\.\w{2,4})(?<querystring>\/.*)?\S*

  • ?协议以检测URL的协议(http,https,ftp等...
  • ?子域以检测任何子域
  • ?域以检测任何域(这里是我要排除mysite的地方)
  • ?tls来检测.com,.org等...
  • ?querystring来检测URL的其余部分

示例:

No detected
https://www.example.org/hello?
http://www.example.org/hello
https://blog.example.org/hello? 
example.org
www.example.org

Detected
www.example.org
www.www.example.org
example.org

You can see this regex and examples on regex101 here

1 个答案:

答案 0 :(得分:0)

正如与您讨论的那样,有几件事需要注意。在下面提到其中的一些

  • 域级别组需要一个*,因为您想允许它零次或多次。
  • 需要将其包含在单词边界中,以防止其部分与文本匹配。
  • 正则表达式末尾的
  • .*必须替换为\S*,以避免与URL中的任何空格匹配

通过这些更改,您已更新且有效的正则表达式将变为

\b(?<protocol>\w+s?:\/\/)?(?<subdomain>\w+\.)*(?<domain>(?!mysite)(\w+))(?<tls>\.\w{2,4})(?<querystring>\/\S*)?\b

Demo