JavaScript正则表达式匹配大写的链接

时间:2017-09-08 16:19:46

标签: javascript regex

我有这个正则表达式代码,我希望它匹配-之前的任何链接

这是我的正则表达式代码

/-(\s+)?[-a-zA-Z0-9@:%_\+.~#?&//=]{1,256}\.[a-z]{2,4}\b(\/[-a-zA-Z0-9@:%_\+.~#?&//=]*)?/

它已匹配这些链接

 - www.demo.com 
 - http://foo.co.uk/

但它并不匹配这些

- WWW.TELEGRAM.COM
- WWW.c.COM
- t.mE/rrbot

您可以转到此链接进行检查http://regexr.com/3gnb1

2 个答案:

答案 0 :(得分:1)

有两种可能的方法。您的正则表达式目前不包括域名中的大写字母,因此您必须将.[a-z]{2,4}替换为.[a-zA-Z]{2,4},或者使整个正则表达式不区分大小写。在后一种情况下,您也可以从之前的组中删除A-Z,从而产生:

/-(\s+)?[-a-z0-9@:%_\+.~#?&//=]{1,256}\.[a-z]{2,4}\b(\/[-a-z0-9@:%_\+.~#?&//=]*)?/i

答案 1 :(得分:1)

为什么要将TLD限制为4个字符?有许多有效的TLD超出了.finance.movie.academy等。

您可以使用之前帖子中的my answer进行一些小调整。

(?(DEFINE)
  (?<scheme>[a-z][a-z0-9+.-]*)
  (?<userpass>([^:@\/](:[^:@\/])?@))
  (?<domain>[a-z0-9]+(-[a-z0-9]+)*(\.[a-z0-9]+(-[a-z0-9]+)*)+)
  (?<ip>(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])))
  (?<host>((?&domain)|(?&ip)))
  (?<port>(:[\d]{1,5}))
  (?<path>([^?;\#\s]*))
  (?<query>(\?[^\#;\s]*))
  (?<anchor>(\#\S*))
)
(?:^)?-\ +((?:(?&scheme):\/\/)?(?&userpass)?(?&host)(?&port)?\/?(?&path)?(?&query)?(?&anchor)?)(?:$|\s+)

您可以在使用here中看到此正则表达式。这应该捕获所有有效 URL(尽管在您的情况下该方案被认为是可选的,因此我在正则表达式中使该方案可选)