JavaScript从字符串中获取顶级域名

3

我想从以下字符串中获取顶级域名:

domain.com -> domain.com
subdomain.domain.com -> domain.com
subdomain.domain.co.uk -> domain.co.uk

目前已经有以下功能:

function gdn(h) {
    return h.substring(h.lastIndexOf(".", h.lastIndexOf(".") - 1) + 1);
}

问题在于这个方法不能处理co.uk域名。以下是返回结果:
hello.domain.co.uk -> co.uk

希望它是 domain.co.uk

有什么想法吗?


你能检查一下 "domain" 的最后一个索引吗? - Vinay S Jain
除非您知道特定的域名、子域名或目标“co.uk”等,否则无法区分“subdomain.domain.com”和“domain.co.uk”的差异,从技术上讲,在句点数量和位置方面它们是相同的。 - adeneo
4个回答

1

我认为如果不检查特定的扩展名,比如“.co.uk”,是不可能做到的。至少单纯的字符计数或点数计数是不行的。

这个答案也证实了这一点: 如何仅使用Javascript获取域名?

关于上面提到的答案,请注意自那时起TLD列表已经大大增长,因此如果您想将该答案作为最终解决方案的基础,请确保更新您的列表。 新的列表: Iana.org的TLD列表


1

0

尝试这个方法可以获得顶级域名 (Fiddle Link):

HTML 代码:

<input type="text" id="url">
<br/>
<input type="button" value="Get Top Domain" id="getTopDomain"/>

获取顶级域名的脚本:

jQuery('#getTopDomain').click(function() {
    var regex = new RegExp(/\./g)
    var text = jQuery('#url').val();
    var count = text.match(regex).length;

    if(count > 1) {
        text = text.substring(text.indexOf('.')+1);
    }
    alert(text);
});

谢谢,

~Chandan


-2
function parseDomain(url) {
  var elts = url.split('.');
  var offset = 2;
  if(elts[elts.length-2] == 'co') {
    offset = 3
  }
  return elts.slice(elts.length-offset, elts.length).join('.')
}

var url = "subdomain.domain.co.uk"
console.log(parseDomain(url))
var url2 = "subdomain.domain.com"
console.log(parseDomain(url2))

1
现在你遇到了.org.uk域名的问题。这样是行不通的。 - Scimonster
我现在同意,如果不创建一个二级域名例外列表是不可能的。 - jmgross
你也会遇到另一个问题,如果一个人在没有国家co二级域名的顶级域名上注册了co.[TLD](例如,foo.co.com应该有co.com作为其主要域名,但是你的函数目前给出了foo.co.com)。正如你所说,这是理论上不可能的,除非你以某种方式将国家域名政策嵌入到你的函数中。 - apsillers

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接