And*_*ndy 13 regex pattern-matching
我想匹配一个简单的域名:example.com
但它的所有组合.
我该怎么做才能涵盖:
https://example.com http://www.example.com etc.
ite*_*tea 11
^https?://([\w\d]+\.)?example\.com$
Run Code Online (Sandbox Code Playgroud)
使用代码:
var result = /^https?:\/\/([a-zA-Z\d-]+\.){0,}example\.com$/.test('https://example.com');
// result is either true of false
Run Code Online (Sandbox Code Playgroud)
我改进它以匹配像"http://abexample.com"
您可能会使用它来匹配URL的域名部分:
/^(?:http(?:s)?:\/\/)?(?:[^\.]+\.)?example\.com$/
Run Code Online (Sandbox Code Playgroud)
它将匹配以下任何字符串:
https://example.com
http://www.example.com
http://example.com
https://example.com
www.example.com
example.com
Run Code Online (Sandbox Code Playgroud)
更新:要匹配完整的URL,而不仅仅是域名部分,请使用:
/^(?:http(?:s)?:\/\/)?(?:[^\.]+\.)?example\.com(\/.*)?$
Run Code Online (Sandbox Code Playgroud)
我使用的一个更通用的例子:
/http(?:s)?:\/\/(?:[\w-]+\.)*([\w-]{1,63})(?:\.(?:\w{3}|\w{2}))(?:$|\/)/i
Run Code Online (Sandbox Code Playgroud)
请注意,此解决方案不会为 5 个字符的 TLD 选择正确的标签。例子:
http://mylabel.co.uk
Run Code Online (Sandbox Code Playgroud)
将被选择为 'co' 而不是 'mylabel',但是
http://mylabel.co
Run Code Online (Sandbox Code Playgroud)
将正确匹配为“mylabel”。即使有这个限制,正则表达式对我来说已经足够了。
请注意,标签的 63 个字符限制是 RFC 规范。希望这可以帮助任何人在未来寻找相同的答案。