我想匹配一个简单的域名:example.com
但它的所有组合。
我该怎么做才能涵盖:
https://example.com http://www.example.com 等等
我想匹配一个简单的域名:example.com
但它的所有组合。
我该怎么做才能涵盖:
https://example.com http://www.example.com 等等
^https?://([\w\d]+\.)?example\.com$
使用代码:
var result = /^https?:\/\/([a-zA-Z\d-]+\.){0,}example\.com$/.test('https://example.com');
// result is either true of false
我改进它以匹配像“http://a.b.example.com”
我使用的一个更通用的例子:
/http(?:s)?:\/\/(?:[\w-]+\.)*([\w-]{1,63})(?:\.(?:\w{3}|\w{2}))(?:$|\/)/i
请注意,此解决方案不会为5个字符的TLD选择正确的标签。例:
http://mylabel.co.uk
将被视为'co'而不是'mylabel',但是
http://mylabel.co
将被正确匹配为'mylabel'。即使有这个限制,正则表达式也足够好了。
请注意,标签的63个字符限制是RFC规范。希望这可以帮助任何人在将来寻找相同的答案。
您可以使用以匹配URL的域名部分:
/^(?:http(?:s)?:\/\/)?(?:[^\.]+\.)?example\.com$/
它将匹配以下任何字符串:
https://example.com
http://www.example.com
http://example.com
https://example.com
www.example.com
example.com
更新: 要匹配完整的URL,而不仅仅是域名部分,请使用:
/^(?:http(?:s)?:\/\/)?(?:[^\.]+\.)?example\.com(\/.*)?$
以下适用于Java,
^(http:|https:|)[/][/]([^/]+[.])*example.com$
并匹配您的测试用例,和 不 匹配案例如
这将正确匹配以下任何变体的URL,以及.com之后的任何内容
https://example.com
https://www.example.com
http://www.example.com
http://example.com
https://example.com
www.example.com
example.com
结果将为true或false
const result = /^(http(s)?(:\/\/))?(www\.)?example\.com(\/.*)?$/.test(value);