这对谷歌来说是一个很好的问题,你知道......但只是为了弄湿你的嘴:Matthew O'Riordan 编写了这样的正则表达式,数学与协议或不协议相关。
这是他的博客文章的链接
但为了将来参考,让我在这里也提供帖子中的正则表达式:
/((([A-Za-z]{3,9}:(?:\/\/)?)(?:[-;:&=\+\$,\w]+@)?[A-Za-z0-9.-]+|(?:www.|[-;:&=\+\$,\w]+@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?(?:[.\!\/\\w]*))?)/
博客作者马修本人也很好地分解了:
(
( # brackets covering match for protocol (optional) and domain
([A-Za-z]{3,9}:(?:\/\/)?) # match protocol, allow in format http:// or mailto:
(?:[\-;:&=\+\$,\w]+@)? # allow something@ for email addresses
[A-Za-z0-9\.\-]+ # anything looking at all like a domain, non-unicode domains
| # or instead of above
(?:www\.|[\-;:&=\+\$,\w]+@) # starting with something@ or www.
[A-Za-z0-9\.\-]+ # anything looking at all like a domain
)
( # brackets covering match for path, query string and anchor
(?:\/[\+~%\/\.\w\-]*) # allow optional /path
?\??(?:[\-\+=&;%@\.\w]*) # allow optional query string starting with ?
#?(?:[\.\!\/\\\w]*) # allow optional anchor #anchor
)? # make URL suffix optional
)
你的具体例子呢
但在您计算 URL 域的情况下,否定的[^\/:]
可能只是:
[-0-9a-zA-Z_.]
这应该匹配 // 之后和第一个 / 之前的所有内容。但是,当您的 URL 不以斜杠结尾时会发生什么?在这种情况下你会怎么做?
上正则表达式(简化)只匹配一个字符,就像您的否定字符集一样。因此,这只是替换了您正在使用的完整 reg ex 中的否定集。