如何从url中获取父域没有子域

时间:2018-06-12 18:12:33

标签: javascript regex

我在很长一段时间内尝试了这个,需要一个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

输出
domainname.io
domainname.net
domainname.com
domain.com
google.co.in
domain-name.com
domain.co.in

谢谢

2 个答案:

答案 0 :(得分:0)

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

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)。

答案 1 :(得分:0)

我们可以试试这个,

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;
}