首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用正则表达式从URL中提取顶级和二级域名

使用正则表达式从URL中提取顶级和二级域名
EN

Stack Overflow用户
提问于 2014-01-17 05:56:48
回答 9查看 35.2K关注 0票数 18

如何使用正则表达式从URL中仅提取顶级和二级域名?我想跳过所有较低级别的域。有什么想法吗?

EN

回答 9

Stack Overflow用户

发布于 2014-01-17 06:41:56

这是我的主意,

使用$锚点从行尾开始三次匹配任何不是点的内容。

字符串末尾的最后一个匹配项应该是可选的,以支持.com.au.co.nz类型的域。

最后一个匹配和倒数第二个匹配都只匹配2-3个字符,所以它不会与二级域名混淆。

正则表达式:

[^.]*\.[^.]{2,3}(?:\.[^.]{2,3})?$

Demonstration:

Regex101 Example

票数 19
EN

Stack Overflow用户

发布于 2014-01-17 06:01:18

2019年更新

这是一个古老的问题,随着我们开始添加新的虚荣old和更多的ccTLD二级域名(例如.co.uk.org.uk),这里的挑战要复杂得多。如此之多,以至于一个正则表达式几乎肯定会返回假阳性或假阴性。

可靠地获取主要主机的唯一方法是调用一个知道它们的服务,比如Public Suffix List

有几个开源库可以使用,比如psl,也可以编写自己的开源库。

psl的用法非常直观。从他们的文档中:

代码语言:javascript
复制
var psl = require('psl');

// Parse domain without subdomain
var parsed = psl.parse('google.com');
console.log(parsed.tld); // 'com'
console.log(parsed.sld); // 'google'
console.log(parsed.domain); // 'google.com'
console.log(parsed.subdomain); // null

// Parse domain with subdomain
var parsed = psl.parse('www.google.com');
console.log(parsed.tld); // 'com'
console.log(parsed.sld); // 'google'
console.log(parsed.domain); // 'google.com'
console.log(parsed.subdomain); // 'www'

// Parse domain with nested subdomains
var parsed = psl.parse('a.b.c.d.foo.com');
console.log(parsed.tld); // 'com'
console.log(parsed.sld); // 'foo'
console.log(parsed.domain); // 'foo.com'
console.log(parsed.subdomain); // 'a.b.c.d'

旧答案

您可以使用以下代码:

代码语言:javascript
复制
(\w+\.\w+)$

如果没有更多的细节(示例文件,您正在使用的语言),就很难准确地辨别出这是否可以工作。

示例:http://regex101.com/r/wD8eP2

票数 14
EN

Stack Overflow用户

发布于 2017-10-25 21:13:37

对于任何使用JavaScript并想要一种简单的方法来提取顶级和二级域名的人,我最终这样做了:

代码语言:javascript
复制
'example.aus.com'.match(/\.\w{2,3}\b/g).join('')

它匹配句点后跟两个或三个字符,然后是word boundary的任何内容。

以下是一些示例输出:

代码语言:javascript
复制
'example.aus.com'       // .aus.com
'example.austin.com'    // .austin.com
'example.aus.com/howdy' // .aus.com
'example.co.uk/howdy'   // .co.uk

有些人可能需要一些更聪明的东西,但对于我的特定数据集来说,这已经足够了。

编辑

我已经意识到实际上有相当多的二级域名超过3个字符(并且允许)。因此,为了简单起见,我只删除了regex中的字符计数元素:

代码语言:javascript
复制
'example.aus.com'.match(/\.\w*\b/g).join('')
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21173734

复制
相关文章

相似问题

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