从location.host获取根域

时间:2012-05-02 21:47:50

标签: javascript jquery string-parsing

有许多SO问题似乎可以解决这个问题的变化。但它们往往是复杂的正则表达式答案,我希望我能找到更简单的东西。

给定

的location.host值
foo.mysite.com
app.foo.mysite.com
mysite.com

如何获取根域mysite.com

我可以做一些事情,比如找到倒数第二个.,但这看起来很丑陋,对.co.uk之类的任何顶级域名都不起作用。如果jQuery有一个包含这些信息的对象,我很乐意使用它。

我的目标是创建存在于所有子域中的Cookie。为此,我需要找到.mysite.com。我不想硬编码。

5 个答案:

答案 0 :(得分:8)

鉴于我们的域名从.com以外的其他任何东西变化的可能性非常低,更不用说SLD了,我编写了类似的内容。

var temp = location.host.split('.').reverse();
var root_domain = '.' + temp[1] + '.' + temp[0];

维护TLD或SLD清单并与之进行比较的开销和维护对我们来说是不值得的。

答案 1 :(得分:4)

您不能将.co.uk称为TLD。它实际上是second level domain。因此根域的含义总是模棱两可的 但是,您可以列出所有可用的顶级域名和二级域名,并尝试查找匹配项。但这将是一项非常昂贵且乏味的操作 如果您想这样做,List of TLDs and SLDs可能会有用:

答案 2 :(得分:3)

如果你想要一行 -

document.domain.split('.').reverse().splice(0,2).reverse().join('.')

location.hostname.split('.').reverse().splice(0,2).reverse().join('.')
输入

'foo.example.com', 'foo.bar.example.com', 'foo.bar.fizz.buzz.example.com'

它将返回:'example.com'

答案 3 :(得分:2)

我一直在使用它:

const rootDomain = s => {
    const r =  /.*\.([^.]*[^0-9][^.]*\.[^.]*[^.0-9][^.]*$)/;
    return s.replace(r, '$1');
};

在输出上与使用拆分,反向等的上述方法相似,但是不会修改直接IP地址。

答案 4 :(得分:0)

const rootDomain = '.' + window.location.hostname.split('.').slice(-2).join('.');