2014-09-19 16 views
5

C'è un modo per ottenere nome di dominio di livello dal URLOttenere secondo nome dominio di primo livello da URL

per esempio, "https://images.google.com/blah" => "google"

ho trovato questo:

var domain = new URL(pageUrl).hostname; 

ma mi dà "images.google.com" invece di solo google.

unit test che ho sono:

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

possibile duplicato [Prendi il nome di dominio del sottodominio Javascript] (http://stackoverflow.com/questions/13367376/get-the-domain-name -of-the-subdomain-javascript) –

+0

Il dominio di primo livello è in realtà la parte .com, quindi penso che tu stia cercando un dominio di secondo livello. Ma cosa ti aspetti da qualcosa come video.google.it - ​​la "co" (il dominio di secondo livello) o "google" o "google.co"? –

+0

solo "google" L'ho menzionato nella domanda – sublime

risposta

5

Si potrebbe fare questo:

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

EDIT

ha visto il cambiamento alla tua domanda, si avrebbe bisogno di un elenco di tutti TLD da abbinare e rimuovere dal nome host, quindi è possibile utilizzare 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

non esattamente hostname-tld, solo dominio di secondo livello – sublime

1

Che ne dici di questo?

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

+0

non funzionerebbe su domini come google.co.uk – sublime

+0

sì, è strettamente necessario l'elenco dei nomi tld come sopra – kechol

0

Che cosa si vuole estrarre dal URL non è il top-level domain (TLD). Il TLD è la parte più a destra, ad es. .com.

Detto questo, non penso che ci sia un modo semplice per farlo perché ci sono URL che hanno due parti "comuni" come ".co.uk" e suppongo che non vogliate esagerare ". co "in quei casi. Potresti forse usare una lista di "TLDs" in due parti esistenti da controllare in modo da sapere quando estrarre quale parte.

3

Questa è la soluzione più semplice oltre a mantenere gli elenchi di domini di primo livello di colore bianco &.

  1. partita sul dominio di primo livello se ha due o più caratteri 'xxxx.yyy'

  2. partita sul dominio di primo livello e sub-dominio, se entrambi sono sotto xxxxx.yy due personaggi. zz '

  3. Rimuovi corrispondenza.

  4. Restituisce tutto tra l'ultimo periodo e la fine della stringa.


ho rotto in due separate o | regex regole:

  1. (\.[^\.]*)(\.*$) - ultimo periodo fino alla fine della stringa se superiore dominio è> = 3.
  2. (\.[^\.]{0,2})(\.[^\.]{0,2})(\.*$) - Top e Sottodominio sono < = 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

grazie per aver risolto il secondo problema! :) Ecco un bookmarklet che ho creato per copiare un URL formattato in Markdown, con il nome di dominio alla fine: 'javascript: if (typeof% 20WxXYnC60 == typeof% 20alert) WxXYnC60(); window.prompt (" Copia% 20page% 20title% 20and% 20URL", "[" + document.title + "] (" + location.href + ")% 20 (" + location.hostname.replace (new% 20RegExp (/ (\. [^ \.] {2 }) (\ [^ \.] {2}) (\ * $) |..... (\ [.^\] *) (\ * $) /), ''). split ('') .pop() + ")"); void (0); ' – ultracrepidarian

+0

fantastico, grazie per aver creato un bookmarklet per questo! – Null

+0

@Null Questa regex funziona anche con i ccTLD internazionalizzati 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 
Problemi correlati