2014-09-19 20 views
5

Czy istnieje sposób, aby uzyskać najlepsze nazwy domeny poziom od urlGet Nazwa domeny drugiego poziomu z URL

na przykład "https://images.google.com/blah" => "google"

znalazłem to:

var domain = new URL(pageUrl).hostname; 

ale daje mi "images.google.com" zamiast tylko google.

Testy jednostkowe mam to:

https://images.google.com => google 
https://www.google.com/blah => google 
https://www.google.co.uk/blah => google 
https://www.images.google.com/blah => google 
+0

możliwe duplikat [Get nazwę domeny subdomeny JavaScript] (http://stackoverflow.com/questions/13367376/get-the-domain-name -of-the-subdomain-javascript) –

+0

Domena najwyższego poziomu jest faktycznie częścią .com, więc myślę, że być może szukasz domeny drugiego poziomu. Czego oczekujesz od czegoś takiego jak video.google.co.uk - "co" (domena drugiego poziomu) lub "google" lub "google.co"? –

+0

Po prostu "google" Wspomniałem o tym w pytaniu – sublime

Odpowiedz

5

Można by to zrobić:

location.hostname.split('.').pop() 

EDIT

Piła zmianę na swoje pytanie, musisz listę wszystkich TLD do dopasowania i usunięcia z nazwy hosta, następnie można użyć split('.').pop()

// small example list 
var re = new RegExp('\.+(co.uk|me|com|us)') 
var secondLevelDomain = 'https://www.google.co.uk'.replace(re, '').split('.').pop() 
+0

nie jest to nazwa hosta-tld, tylko domena drugiego poziomu – sublime

1

Co powiesz na to?

location.hostname.split('.').reverse()[1]

+0

nie działałaby w domenach takich jak google.co.uk – sublime

+0

tak, potrzebujesz tylko listy nazw plików powyżej – kechol

0

Co chcesz wyodrębnić z adresu URL nie jest top-level domain (TLD). TLD jest najbardziej prawą częścią, np. .com.

Powiedziawszy to, nie sądzę, że istnieje prosty sposób, aby to zrobić, ponieważ istnieją adresy URL, które mają dwie "wspólne" części, takie jak ".co.uk" i przypuszczam, że nie chcesz, aby je ustrukturyzować ". co "w tych przypadkach. Możesz użyć listy istniejących dwuczęściowych "TLD" do sprawdzenia, aby wiedzieć, kiedy wyodrębnić część.

3

Jest to najprostsze rozwiązanie, poza utrzymaniem białych czarnych domen na poziomie najwyższego szczebla &.

  1. Mecz w domenie najwyższego poziomu, jeśli ma dwa lub więcej bohaterów xxxx.yyy '

  2. mecz na najwyższym poziomie domeny i subdomeny, jeśli oba są pod xxxxx.yy dwa znaki. zz '

  3. Usuń mecz.

  4. Zwraca wszystko między ostatnim okresem i końcem ciągu.


złamałem ją na dwie oddzielne lub | regex zasad:

  1. (\.[^\.]*)(\.*$) - ostatni okres do końca sznurka czy top domena jest> = 3.
  2. (\.[^\.]{0,2})(\.[^\.]{0,2})(\.*$) - Top Pod-domena to < = 2.

var regex_var = new RegExp(/(\.[^\.]{0,2})(\.[^\.]{0,2})(\.*$)|(\.[^\.]*)(\.*$)/); 
 
var unit_test = 'xxx.yy.zz.'.replace(regex_var, '').split('.').pop(); 
 
document.write("Returned user entered domain: " + unit_test + "\n"); 
 

 
var result = location.hostname.replace(regex_var, '').split('.').pop(); 
 
document.write("Current Domain: " + result);

+0

dziękuję za rozwiązanie drugiego problemu! :) Tutaj jest bookmarklet, który zrobiłem, aby skopiować adres URL sformatowany w Markdown, z nazwą domeny na końcu: 'javascript: if (typeof% 20WxXYnC60 == typeof% 20alert) WxXYnC60(); window.prompt (" Copy% 20page% 20title% 20and% 20URL "," ["+ document.title +"] ("+ location.href +")% 20 ("+ location.hostname.replace (new% 20RegExp (/ (\. [^ \.] {2 }) (\. [^ \.] {2}) (\. * $) | (\. [^ \.] *) (\. * $) /), ''). Split ('.') .pop() + ")"); void (0); ' – ultracrepidarian

+0

niesamowite, dziękuję za stworzenie bookmarkletu na to! – Null

+0

@Null Czy to wyrażenie regularne będzie działać również z internacjonalizowanym ccTLDs https://en.wikipedia.org/wiki/Internationalized_country_code_top-level_domain – Vipresh

-1
function getDomainName(hostname) { 
    var TLDs = new RegExp(/\.(com|net|org|biz|ltd|plc|edu|mil|asn|adm|adv|arq|art|bio|cng|cnt|ecn|eng|esp|etc|eti|fot|fst|g12|ind|inf|jor|lel|med|nom|ntr|odo|ppg|pro|psc|psi|rec|slg|tmp|tur|vet|zlg|asso|presse|k12|gov|muni|ernet|res|store|firm|arts|info|mobi|maori|iwi|travel|asia|web|tel)(\.[a-z]{2,3})?$|(\.[^\.]{2,3})(\.[^\.]{2,3})$|(\.[^\.]{2})$/); 
    return hostname.replace(TLDs, '').split('.').pop(); 
} 

/*** TEST ***/ 

var domains = [ 
    'domain.com', 
    'subdomain.domain.com', 
    'www.subdomain.domain.com', 
    'www.subdomain.domain.info', 
    'www.subdomain.domain.info.xx', 
    'mail.subdomain.domain.co.uk', 
    'mail.subdomain.domain.xxx.yy', 
    'mail.subdomain.domain.xx.yyy', 
    'mail.subdomain.domain.xx', 
    'domain.xx' 
]; 

var result = []; 
for (var i = 0; i < domains.length; i++) { 
    result.push(getDomainName(domains[i])); 
} 

alert (result.join(' | ')); 

// result: domain | domain | domain | domain | domain | domain | domain | domain | domain | domain 
Powiązane problemy