我有以下正则表达式:
/^(https?:\/\/)(.+\.)?(.+)(\..*)$/gm
名单是:
https://localhost
https://www.example.com
https://www.subdomain.example.com
https://example.com
http://example.com
http://example..com
http://....example.com
匹配:
https://www.example.com
https://www.subdomain.example.com
https://example.com
http://example.com
http://example..com
http://....example.com
问题是,我想匹配https://localhost
,我不想匹配:
http://example..com
http://....example.com
为什么我不只使用 /^https?:\/\/.+$/gm
?因为我需要分组捕捉它们。因此,我的意思是:
对于 https://www.subdomain.example.com
Group 1: https://
Group 2: www.subdomain.
Group 3: example
Group 4: .com
对于 https://localhost
,它会是:
Group 1: https://
Group 3: localhost
对于https://www.example.com
:
Group 1: https://
Group 2: www.
Group 3: example
Group 4: .com
所以,在:
https://localhost
https://www.example.com
https://www.subdomain.example.com
https://example.com
http://example.com
http://example..com
http://....example.com
我只想匹配:
https://localhost
https://www.example.com
https://www.subdomain.example.com
https://example.com
http://example.com
顺便说一句,它不应该匹配无效的网址:
http:
https://
只有完整的网址。
顺便说一句,任何子域。
这是一个链接:https://regex101.com/r/z7V33F/1
我怎样才能做到这一点?
最佳答案
你可以使用这个正则表达式:
^(https?://)((?:[\w-]+\.){0,2}?)([^.]+)(\.[^.]+)?$
正则表达式详细信息:
-
^
: 开始 -
(https?://)
: 匹配https://
或http://
并在第 1 组中捕获 -
((?:[\w-]+\.){0,2}?)
: 匹配域的第一部分并在 optional group #2 中捕获
-
([^.]+)
: 匹配域名的第 (last-1) 部分并在第 3 组中捕获 -
(\.[^.]+)?
: 匹配域的最后一部分并在 *optional& group #4 中捕获 -
$
: 结束
关于regex - 如何使以下正则表达式也匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66103906/