【问题标题】:Extracting the domain name from a URL using javascript使用javascript从URL中提取域名
【发布时间】: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


【解决方案1】:

如果你愿意,当然可以

"mail.google.co.uk"

你可以使用

url.host

或者如果你想要它带有标题,使用

url.origin

干杯!

【讨论】:

    猜你喜欢
    • 2021-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-06
    • 2017-10-16
    • 2019-09-24
    • 2022-01-16
    • 1970-01-01
    相关资源
    最近更新 更多