Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript从字符串中获取顶级域_Javascript - Fatal编程技术网

Javascript从字符串中获取顶级域

Javascript从字符串中获取顶级域,javascript,Javascript,我想从以下字符串中获取顶级域: 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域。报税表

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

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


有什么想法吗?

如果不检查具体的扩展名,比如“.co.uk”,我认为这是不可能的。
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))
至少,仅仅使用字符计数或点计数是不可能的

这一回答也证实了这一点:

关于上面提到的答案,请注意,TLD的列表从那时起已经增长了很多,因此,如果您想使用该答案作为最终解决方案的基础,请确保更新您的列表。
最新列表:

试试这个,它可以获得顶级域名():

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

这个应该可以帮你:


你能检查一下“域”的最后一个索引吗?除非你明确知道域、子域或目标
co.uk
等,否则无法知道
subdomain.domain.com
domain.co.uk
之间的区别,在句点的数量和位置等方面,它们在技术上是相同的。因此,现在您在
.org.uk
域方面遇到了问题。这是行不通的。我现在同意,不创建二级域例外列表是不可能的。如果一个人在没有国家二级域的TLD上注册
co.[TLD]
,那么在另一个方向上你也会遇到问题(例如,
foo.co.com
应该将
co.com
作为其主要域,但您的函数目前提供
foo.co.com
)。正如您所说,除非您以某种方式将国家域政策嵌入到您的函数中,否则这在理论上是不可能的。
var re = /([^.]+\.)?([^\.]+\..+)/; 
var str = 'subdomain.domain.co.uk';

var m = str.match(re);

if (m.length > 2)
  console.log(m[2]);