正则表达式匹配简单域

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"


anu*_*ava 5

您可能会使用它来匹配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)

  • 你好!虽然此代码可以解决问题,但包括解释如何以及为何解决问题将真正有助于提高帖子的质量,并可能会带来更多的赞成票。请记住,您是在为将来的读者回答问题,而不仅仅是现在提问的人。请编辑您的答案以添加解释并指出适用的限制和假设。如果问题已经得到解答,则应在评论中写入该 SO 帖子的链接,或将该帖子报告为重复项,而不是重新回答以使 SO 按设计运行 (2认同)
  • 非常有效的观点@SherylHohman,并对我发布此内容时没有添加解释表示歉意。我现在在我的答案中添加了一个工作演示和解释。谢谢! (2认同)

Dan*_*iel 5

我使用的一个更通用的例子:

/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 规范。希望这可以帮助任何人在未来寻找相同的答案。