【发布时间】:2018-09-08 10:11:52
【问题描述】:
我需要一个通用脚本/模式来从 URL 中提取主域名。我的以下尝试失败了。
假设我有这个链接 1 并且需要提取主域名 (google.co.uk) 而没有子域 (mail)。我制作了这个脚本,它在.co.uk 上运行良好,但在具有一个顶级域名的网站上会失败,例如:.com 和.com。
有没有更好的方法从任何 URL 中提取主域名? URL构造如下:
https://(optional sub-domain)*(domain name with two or three top-level domain name)(optional forward slash followed by text)*
* 引用零次或多次。
var link1="https://mail.google.co.uk/link/link/link";
var url = new URL(link1);
var domain = url.hostname.split('.').slice(-3).join('.');
console.log("The domain name is: "+ domain);
在上面的代码中,我期望:google.co.uk
它可以工作,因为该链接在顶级域名 (.co.uk) 中有两个部分,因此 -3 有效。但我也需要代码才能使用此链接:
var link1="https://mail.google.com/link/link/link";
我需要输出为:google.com
但问题是代码产生:
mail.google.com
而我只想要主域名:google.com
编辑: 一些预期的输出示例如下:
1) 在mail.google.co.uk 中应该是:google.co.uk
2) 在mail.google.com 中应该是:google.com
3) 在link.mail.google.com/link/link 中应该是:google.com
4) 在link.link2.mail.google.com 中应该是:google.com
即只是主域名,没有子域或域名后的链接。顶级域名可以是(.com、.net、.org等)的形式,也可以是(.co.uk、.co.us等)的形式。顶级域名,无论是一个部分还是两个部分都应该被捕获(我的代码只捕获了两个部分)。
【问题讨论】:
-
link1 的
domain的预期输出是什么? -
@Nikola Lukic 那个链接是提取顶级域名的。我问的是除了顶级域名之外的主域名。例如
google.com,google.co.uk. -
我看到的解析问题 '.'和双点。您必须创建一些验证对象并定义具体角色。例如让这个“.co.uk”像例外情况一样。程序必须知道什么时候是两个或一个点的有效结果。
-
@Nikola Lukic 适用于任何 URL。我不能例外。它不仅是
.co.uk,而且可以是任何东西。例如:.co.us或任何其他类型。
标签: javascript regex url