【问题标题】:How to get parent domain out of url no sub-domain [duplicate]如何从没有子域的url中获取父域[重复]
【发布时间】: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

谢谢

【问题讨论】:

  • 如果您正在尝试,请显示您的尝试代码

标签: javascript regex


【解决方案1】:

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

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

解释:

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

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

(\S{3,}(?:\.\S{1,3}){1,2}):捕获域和 TLD。详细:

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

(?:\.\S{1,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
    猜你喜欢
    • 2011-03-13
    • 2019-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-22
    • 2015-08-03
    • 2017-12-14
    相关资源
    最近更新 更多