Я пробовал это с очень долгого времени. Вам нужна функция 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
Спасибо
Это решение может быть не идеальным, но работает для ваших данных образца:
function extractDomain(url) {
return url.match(/https?:\/\/(?:\S+\.)*(\S{3,}(?:\.\S{1,3}){1,2})/)[1]
}
Объяснение:
https?:\/\/
: Ищет http или https
(?:\S+\.)*
: (?:\S+\.)*
но не фиксирует любое количество поддоменов
(\S{3,}(?:\.\S{1,3}){1,2})
: захватывает домен и TLD. В деталях:
S{3,}
: поиск чего-то большего, что должно быть частью домена (например, google
). Это не идеально, потому что доменное имя длиной 2 буквы не совпадает.
(?:\.\S{1,3}){1,2}
: Соответствует части TLD: один TLD (например .com
) или две короткие части (например, .co.in
).
Мы могли бы попробовать это,
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