问题 正则表达式匹配简单域


我想匹配一个简单的域名:example.com

但它的所有组合。

我该怎么做才能涵盖:

https://example.com
http://www.example.com
等等

10936
2018-01-12 05:10


起源

你必须使用一个正则表达式吗?使用现有的URL解析器然后单独查看这些部分将不易出错。 - mu is too short
@muistooshort最初我有 /^https?:\/\/.*?\.?facebook\.com\// 但是认为它可能不适用于所有情况? - Andy
这会让一些无效的URL通过(例如 http://a_b.facebook.com/)但这可能不是问题。 - mu is too short


答案:


^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”


7
2018-01-12 05:12



您可能想要调整该字符类。不是全部 \w 在域名中有效(_ 特别是)和连字符 是 允许。 - mu is too short
@itea - 谢谢 - 但是你可以为我添加javascript转义吗? - Andy
@muistooshort谢谢。 - itea
@Andy你可以试试正则表达式 regexpal.com - itea
@itea再次感谢你的帮助 - 但我还有probs。看到 jsfiddle.net/v4WVU - Andy


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

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


4
2017-07-26 16:20





您可以使用以匹配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(\/.*)?$     

3
2018-01-12 05:18



非常感谢,但似乎没有用?看到 jsfiddle.net/v4WVU - Andy
实际上它有效,看到那里: jsfiddle.net/v4WVU/3 你想要匹配 location.href 这是 http://fiddle.jshell.net/_display/。正如我在上面所写的那样,RegEx用于匹配域名而不是完整的URL。 - anubhava


以下适用于Java,

^(http:|https:|)[/][/]([^/]+[.])*example.com$

并匹配您的测试用例,和  匹配案例如

http://www.google.com/http://example.com


1
2017-12-21 18:48





这将正确匹配以下任何变体的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); 

1
2017-07-07 08:57