正则表达式只匹配域名而不是子域

时间:2014-01-01 08:24:52

标签: regex

我想在REGEX中仅匹配domain.com而不匹配subdomain.domain.com。

现在我有这个正则表达式

/([0-9a-z-]{2,}\.[0-9a-z-]{2,3}\.[0-9a-z-]{2,3}|[0-9a-z-]{2,}\.[0-9a-z-]{2,3})$/i

但它也匹配子域名。所以我想跳过带有子域的域,只处理“正常”域。

有什么想法吗?谢谢!

编辑:不应该跳过.co.in,.co.uk等域名。

2 个答案:

答案 0 :(得分:3)

会这样做吗?

/^[0-9a-z-]+\.(?:(?:co|or|gv|ac)\.)?[a-z]{2,7}$/i

仅匹配domain.com

稍微改变了一下,因为将TLD限制为最多3个字符会取消.museum之类的内容,还是有意?

如果你真的需要一个更精确的模式,那将是一个非常棒的长模式,正则表达式可能不是最好的解决方案。正如您所看到的,那里有many tldseven more two-level-tlds:)

答案 1 :(得分:2)

您要做的第一件事是明确定义域扩展,否则需要

  

domain.co.in作为子域名,但它是一个域名。

所以你的正则表达式需要有类似的东西(com | co.in | co.uk | org | org.in ...)

试试这个(经过试验和测试)

 ^[0-9a-z-]+\.(?:\.)?(com|com.au|org|org.in|co|co.uk)$

希望有所帮助:)