有许多SO问题似乎可以解决这个问题的变化。但它们往往是复杂的正则表达式答案,我希望我能找到更简单的东西。
给定
的location.host值foo.mysite.com
app.foo.mysite.com
mysite.com
如何获取根域mysite.com
?
我可以做一些事情,比如找到倒数第二个.
,但这看起来很丑陋,对.co.uk
之类的任何顶级域名都不起作用。如果jQuery有一个包含这些信息的对象,我很乐意使用它。
我的目标是创建存在于所有子域中的Cookie。为此,我需要找到.mysite.com
。我不想硬编码。
答案 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('.');