将链接与大写字母匹配的JavaScript正则表达式

将链接与大写字母匹配的JavaScript正则表达式,javascript,regex,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 您可以转到此链接查看它有两

我有这个正则表达式代码,我希望它匹配前面有
-

这是我的正则表达式代码

/-(\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

您可以转到此链接查看它

有两种可能的方法。您的正则表达式当前不包括域名中的大写字母,因此您必须将
[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

有两种可能的方法。您的正则表达式当前不包括域名中的大写字母,因此您必须将
[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

为什么要将TLD限制为4个字符?有许多有效的TLD超出了这一范围,例如
.finance
.movie
.academy

您可以使用上一篇文章中的内容并进行一些小的调整

(?(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+)
(?(定义)
(?[a-z][a-z0-9+.-]*)
(?([^:@\/](:[^:@\/])?@))
(?[a-z0-9]+([a-z0-9]+)*(\[a-z0-9]+([a-z0-9]+)*)+)
[0-9 A-9 A-A-A-A-F-F-fA-F[0-0-9 A-A-A-F-fA-F[1,4}|([0-0-9 A-9 A-A-A-F-F[1,1,4}:([0-0-9 A-9 A-9 A-A-A-F-fA-F[0-fA-F[0-A-A-F[0-A-A-A-F[0-A-A-A-A-F[0-F[1,1,1,1,4}::{1,4}:::[1,4}::::::::::::::::::::{{{{{{[1,1,1,1,4}:::::::::::::::::::::::::{[0-0-0-0-0-0[0-9a-FaA-fA-fA-F[1,4}{{1,4}{1,4}{1,4}{1,3}[1,3 3}\124([0-9a-A-fA-fA-F[0-9a-A-fA-fA-F[0-9a-A-fA-F[0-A-fA-F[0-A-A-A-fA-F[1,1,4}{1,4}{{1,4}{1,4}{1,4}{{{{1,3},,,,[1,3}([1,3}([0-1,3[0-9a-9a-A-A-A-fA-fA-F[0-A-F[0-A-F{{{{{{[1,1,1,4}{{{{{{{{{{{{{{{((:[0-9a-fA-F]{1,4}){1,6})|(以下:::::::::::::::[0-9 A-9 A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-fA-F{{1,7 7}{1,7}{1,7 7}124:::::::::::)fe80::::(::::::::::::::::::::::::::::[0.0.0.0.0.1.1}(((0.0.0.0.1)0.1)0.0.1)0.0.1}((((25[0[0[0[0-0-5-0-5[0-0-5[0-0-0-5[0-5[0-0-5 5 5 5 5 5 5 5 5 5 5 5 5 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]){3,3}(25[0-5]|(2[0-4]|(2[0-4]| 1{0,1}[0-9]){0,1}[0-9]){
(?(?&domain)|(?&ip)))
(?(:[\d]{1,5}))
(([^?;\\\\s]*))
(?(\?[^\\s]*))

(?.这应该可以捕获所有有效的URL(尽管在您的情况下,该方案被视为可选的,所以我在正则表达式中将该方案设置为可选的)

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

您可以使用上一篇文章中的内容并进行一些小的调整

(?(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+)
(?(定义)
(?[a-z][a-z0-9+.-]*)
(?([^:@\/](:[^:@\/])?@))
(?[a-z0-9]+([a-z0-9]+)*(\[a-z0-9]+([a-z0-9]+)*)+)
[0-9 A-9 A-A-A-A-F-F-fA-F[0-0-9 A-A-A-F-fA-F[1,4}|([0-0-9 A-9 A-A-A-F-F[1,1,4}:([0-0-9 A-9 A-9 A-A-A-F-fA-F[0-fA-F[0-A-A-F[0-A-A-A-F[0-A-A-A-A-F[0-F[1,1,1,1,4}::{1,4}:::[1,4}::::::::::::::::::::{{{{{{[1,1,1,1,4}:::::::::::::::::::::::::{[0-0-0-0-0-0[0-9a-FaA-fA-fA-F[1,4}{{1,4}{1,4}{1,4}{1,3}[1,3 3}\124([0-9a-A-fA-fA-F[0-9a-A-fA-fA-F[0-9a-A-fA-F[0-A-fA-F[0-A-A-A-fA-F[1,1,4}{1,4}{{1,4}{1,4}{1,4}{{{{1,3},,,,[1,3}([1,3}([0-1,3[0-9a-9a-A-A-A-fA-fA-F[0-A-F[0-A-F{{{{{{[1,1,1,4}{{{{{{{{{{{{{{{((:[0-9a-fA-F]{1,4}){1,6})|(以下:::::::::::::::[0-9 A-9 A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-fA-F{{1,7 7}{1,7}{1,7 7}124:::::::::::)fe80::::(::::::::::::::::::::::::::::[0.0.0.0.0.1.1}(((0.0.0.0.1)0.1)0.0.1)0.0.1}((((25[0[0[0[0-0-5-0-5[0-0-5[0-0-0-5[0-5[0-0-5 5 5 5 5 5 5 5 5 5 5 5 5 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]){3,3}(25[0-5]|(2[0-4]|(2[0-4]| 1{0,1}[0-9]){0,1}[0-9]){
(?(?&domain)|(?&ip)))
(?(:[\d]{1,5}))
(([^?;\\\\s]*))
(?(\?[^\\s]*))

(?。这应该捕获所有有效的URL(尽管在您的情况下,该方案被视为可选的,因此我在正则表达式中使该方案成为可选的)

在正则表达式的末尾放置一个/I,这将使其不区分大小写。是的,它可以工作,谢谢您我要问您使用
(\s+)有什么原因吗?
而不是
\s*
?将a/i放在正则表达式的末尾,这将使其不区分大小写。是的,它可以工作。谢谢。我必须问一下,您使用
(\s+)
而不是
\s*
有什么原因吗?