如何从没有子域的url中获取父域[重复]

Posted

技术标签:

【中文标题】如何从没有子域的url中获取父域[重复]【英文标题】:How to get parent domain out of url no sub-domain [duplicate] 【发布时间】:2018-11-22 05:10:32 【问题描述】:

我尝试了很长时间,需要一个 javascript 函数来从 URL 中提取父域。

输入https://app.domainname.io http://domainname.net https://domainname.com https://app.domain.com https://www.google.co.in http://dev2-aa.domain-name.com https://app.domain.co.in

输出 域名.io 域名.net 域名.com 域名.com google.co.in 域名.com domain.co.in

谢谢

【问题讨论】:

如果您正在尝试,请显示您的尝试代码 【参考方案1】:

此解决方案可能并不完美,但适用于您的示例数据:

function extractDomain(url) 
  return url.match(/https?:\/\/(?:\S+\.)*(\S3,(?:\.\S1,3)1,2)/)[1]

解释:

https?:\/\/: 寻找 http 或 https

(?:\S+\.)*:匹配但不捕获任意数量的子域

(\S3,(?:\.\S1,3)1,2):捕获域和 TLD。详细:

S3,:寻找更长的内容,应该是域部分(例如google)。这并不完美,因为 2 个字母长的域名不匹配。

(?:\.\S1,3)1,2:匹配 TLD 部分:单个 TLD(例如 .com)或两个短部分(例如 .co.in)。

【讨论】:

【参考方案2】:

我们可以试试这个,

function getHostName(url) 
    var match = url.match(/:\/\/(www[0-9]?\.)?(.[^/:]+)/i);
    if (match != null && match.length > 2 && typeof match[2] === 'string' && match[2].length > 0) 
    return match[2];
    
    else 
        return null;
    


function getDomain(url) 
    var hostName = getHostName(url);
    var domain = hostName;

    if (hostName != null) 
        var parts = hostName.split('.').reverse();

        if (parts != null && parts.length > 1) 
            domain = parts[1] + '.' + parts[0];

            if (hostName.toLowerCase().indexOf('.co.uk') != -1 && parts.length > 2) 
              domain = parts[2] + '.' + domain;
            
        
    

    return domain;

【讨论】:

getDomain('https://www.google.co.in') --> co.in 你是对的:D

以上是关于如何从没有子域的url中获取父域[重复]的主要内容,如果未能解决你的问题,请参考以下文章

子域 cookie,在父域请求中发送?

从父域到子域的 JavaScript 访问?

使子域读取父域会话

Dns 无法从不同注册器中的父域解析 Route 53 中的子域

应用程序域

在 django 中使用子域