2012-05-16 5 views
1

У меня есть URL-адрес в виде строки, как это:Извлечение доменного имени суффикс из любого URL

str="http://code.google.com" 

and some other like str="http://sub.google.co.in"  

я хочу, чтобы извлечь google.com из первого и google.co.in из второй строки.

, что я сделал это:

var a, d, i, ind, j, till, total; 

a = document.createElement('a'); 

a.href = "http://www.wv.sdf.sdf.sd.ds..google.co.in"; 

d = ""; 

if (a.host.substr(0, 4) === "www.") { 
    d = a.host.replace("www.", ""); 
} else { 
    d = a.host; 
} 

till = d.indexOf(".com"); 

total = 0; 

for (i in d) { 
    if (i === till) { 
    break; 
    } 
    if (d[i] === ".") { 
    total++; 
    } 
} 

j = 1; 

while (j < total) { 
    ind = d.indexOf("."); 
    d = d.substr(ind + 1, d.length); 
    j++; 
} 

alert(d); 

Мой код работает, но он работает только для «.com», он не работает для других, как «.co.in», „co.uk“ до Уточняю их вручную, может ли кто-нибудь сказать мне решение для этого? Я не против, даже мне нужно изменить полный код, но он должен работать. Спасибо

ответ

2

Единственное текущее практическое решение (и даже это не работает на 100%) - это ссылка на Public Suffix List в вашем коде и синхронизация с этим списком по мере необходимости.

Существует no алгоритм, который может смотреть на доменное имя и определять, какая часть является «зарегистрированным доменным именем», а какие являются субдоменами. Это невозможно даже путем опроса самого DNS.

0

Регулярные выражения достаточно сильны для таких проблем.

https://regex101.com/r/rW4rD8/1

ниже код должен соответствовать этой цели.

var getSuffixOnly = function (url) { 

    var normalized = url.toLowerCase(); 
    var noProtocol = normalized.replace(/.*?:\/\//g, ""); 
    var splittedURL = noProtocol.split(/\/|\?+/g); 

    if (splittedURL.length > 1){ 
     noProtocol = splittedURL[0].toString().replace(/[&\/\\#,+()$~%'":*?<>{}£€^ ]/g, ''); 
    } 

    var regex = /([^.]{2,}|[^.]{2,3}\.[^.]{2})$/g; 
    var host = noProtocol.match(regex); 


    return host.toString(); 

}; 

getSuffixOnly(window.location.host); 
Смежные вопросы