Javascript 从location.host获取根域

Javascript 从location.host获取根域,javascript,jquery,string-parsing,Javascript,Jquery,String Parsing,有很多这样的问题,似乎解决了这个问题的变化。但它们往往是复杂的正则表达式答案,我希望我能找到更简单的答案 给定的location.host值 foo.mysite.com app.foo.mysite.com mysite.com 如何获取根域mysite.com 我可以做一些事情,比如找到倒数第二个,但这看起来很难看,对任何TLD都不起作用,比如.co.uk。如果jQuery有一个包含此信息的对象,我很乐意使用它 我的目标是创建跨越所有子域的cookie。为此,我需要找到.mysite.co

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

给定的location.host值

foo.mysite.com
app.foo.mysite.com
mysite.com
如何获取根域
mysite.com

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


我的目标是创建跨越所有子域的cookie。为此,我需要找到
.mysite.com
。我不想硬编码。

您不能将.co.uk称为TLD。这实际上是一个错误。因此,什么是根域总是模棱两可的。
但是,您可以列出所有可用的TLD和二级域,并尝试查找匹配项。但这将是一个非常昂贵和乏味的操作。

如果你想这样做,这可能会很有用:

考虑到我们的域名从.com以外的任何内容更改的可能性非常低,更不用说更改为SLD了,我在中编写了类似的代码

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

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

如果您希望将所有内容都放在一行上-

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

输入:
'foo.example.com'、'foo.bar.example.com'、'foo.bar.fizz.buzz.example.com'

它将返回:
'example.com'

我一直在使用这个:

const rootDomain = s => {
    const r =  /.*\.([^.]*[^0-9][^.]*\.[^.]*[^.0-9][^.]*$)/;
    return s.replace(r, '$1');
};
它的输出类似于上面使用拆分、反向等的方法,但它不修改直接的IP地址。

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

给定一个有效的TLD列表应该不难-而不是倒数第二个
您想要TLD之后的第一个
(从右到左读取)。你可以用一个大的正则表达式或循环来实现这一点,但后者通常效率较低。这里可以找到一个完整的列表:我想无论你是使用正则表达式还是其他方式都不会有太大的区别。在任何情况下,你都必须考虑所有的公共TLD和SLD。看一看。有一个项目要做这件事,但它声称是“失败的”。我还没有尝试过它,但它可以为你的解决方案奠定基础。@FelixKling-谢谢,太好了。投票结束我自己的问题。如果它真的对你有帮助,你也可以删除你的问题。。。只是说:)快乐的编码!如果您想自己避免维护,可以使用。它基于Mozilla公共后缀列表。您可能希望使用
location.hostname
而不是
host
-请参阅,虽然此代码可能会解决此问题,但一个好的答案还应该解释代码的作用以及它的帮助。@BDL此代码非常标准且自我解释。你还期望什么?
const rootDomain = s => {
    const r =  /.*\.([^.]*[^0-9][^.]*\.[^.]*[^.0-9][^.]*$)/;
    return s.replace(r, '$1');
};