【问题标题】:How to extract only domain name from window.location object?如何从 window.location 对象中仅提取域名?
【发布时间】:2017-04-10 21:00:04
【问题描述】:

例如,我只想从这些提及的主机名中提取“google”

我不想检索主机名,我只需要没有 tld 和子域的域名(如果有的话)。

等等。

【问题讨论】:

标签: javascript


【解决方案1】:

只需使用location.host 并从中提取想要的部分,这是一个您可以使用的实用函数:

function extractDomainName(hostname) {
    var host = hostname;
    host = host.replace(/^www\./i, "");
    host = host.replace(/(\.[a-z]{2,3})*\.[a-z]{2,3}$/i, "");
    return host;
}

它采用整个hostname 并仅从其中返回域名,使用.replace() 方法和regex 仅提取域名。

你可以在这里看到它的工作原理。

演示:

function extractDomainName(hostname) {
  var host = hostname;
  host = host.replace(/^www\./i, "");
  host = host.replace(/(\.[a-z]{2,3})*\.[a-z]{2,3}$/i, "");
  return host;
}

var tests = ["www.google.com", "www.tutorialspoint.com", "somesite.gov.fr", "www.path.co.ltd"];

tests.forEach(function(hostname) {
  console.log(hostname);
  console.log(extractDomainName(hostname));
});

【讨论】:

  • 谢谢@chsdk,但我只需要域名,不需要主机。例如:stackoverflow.com ==> stackoverflow
  • 不明白,能不能解释一下。
  • 我的意思是对于主机 www.stackoverflow.com 解决方案应该只返回“stackoverflow”,同样对于 www.stackoverflow.co.in 解决方案应该只返回“stackoverflow”。
  • @shekhardtu 你需要使用regexstring.replace()来实现,请看我的Edit。
  • 此类过滤器存在问题,因为您无法分辨要保留哪些点:extractDomainName("secure.payments.google.co.uk")
【解决方案2】:

使用位置对象的主机名,您可以在 TLD 之前检查域名。这也会忽略子域。

var domain = window.location.hostname.match(/([a-z0-9-]*?)\.[a-z]{2,}$/)[1];

console.log(domain);

【讨论】:

    猜你喜欢
    • 2022-01-08
    • 2012-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多