首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript/Regex用于查找没有子域的根域名

Javascript/Regex用于查找没有子域的根域名
EN

Stack Overflow用户
提问于 2010-08-09 12:13:58
回答 6查看 14.7K关注 0票数 14

我进行了搜索,找到了很多类似的正则表达式示例,但并不完全符合我的需要。

我希望能够传入以下urls并返回结果:

  • www.google.com返回google.com
  • sub.domains.are.cool.google.com返回google.com
  • doesntmatterhowlongasubdomainis.idont.wantit.google.com返回google.com
  • sub.domain.google.com/no/thanks返回google.com

希望这是有意义的:)预先感谢!-James

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-09-21 23:46:02

您不能使用正则表达式来实现这一点,因为您不知道后缀中有多少块。

例如,google.com的后缀为com。要从subdomain.google.comgoogle.com,你必须使用最后两个街区--一个是后缀,另一个是谷歌

但是,如果将此逻辑应用于subdomain.google.co.uk,则最终会得到co.uk

实际上,您需要从像http://publicsuffix.org/这样的列表中查找后缀

票数 12
EN

Stack Overflow用户

发布于 2010-09-28 22:23:55

不要使用regex,使用.split()方法并在那里工作。

代码语言:javascript
复制
var s = domain.split('.');

如果用例相当狭窄,则可以根据需要检查TLD,然后酌情返回最后的2或3段:

代码语言:javascript
复制
return s.slice(-2).join('.');

它会让你的眼睛出血比任何药水都少。

票数 9
EN

Stack Overflow用户

发布于 2010-08-09 16:11:43

我对此没有做太多的测试,但如果我理解你的要求,这应该是一个不错的起点.

代码语言:javascript
复制
([A-Za-z0-9-]+\.([A-Za-z]{3,}|[A-Za-z]{2}\.[A-Za-z]{2}|[A-za-z]{2}))\b

编辑:

为了澄清,它正在寻找:

一个或多个字母数字字符或破折号,后面跟着一个文字点

然后三件事之一。

  1. 三个或更多阿尔法字符(即com/net/mil/coop等)
  2. 两个字母字符,后面跟着一个文字点,后面跟着两个阿尔法字符(即co.uk)
  3. 两个阿尔法字符(即us/uk/to等)

在结尾处,单词边界(\b)表示字符串、空格或非单词字符的结尾( regex单词字符通常是alpha-数字和下划线)。

正如我所说,我没有做太多的测试,但这似乎是一个合理的起点。您可能需要尝试并对其进行调优,即使这样,您也不太可能获得100%的测试用例。有一些考虑因素,比如Unicode域名和各种各样的technically-valid-but-you'll-likely-not-encounter-in-the-wild东西,这些都会给您带来这样一个简单的正则表达式,但是这可能会让您了解到90%+的存在方式。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3439863

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档