2012-02-20 7 views
5

data una stringa con gli URL nei seguenti formati:Dato un URL come stringa, come estrarre solo il dominio e l'estensione?

https://www.cnn.com/ 
http://www.cnn.com/ 
http://www.cnn.com/2012/02/16/world/american-nicaragua-prison/index.html 
http://edition.cnn.com/?hpt=ed_Intl 

W JS/jQuery, come posso estrarre dalla stringa appena cnn.com per tutti loro? Dominio di primo livello più estensione?

Grazie

+1

url.match (/:. \/\/([^ /] +) /) [1] ; – AnApprentice

+0

Perché preoccuparsi della regex. È un coltellino svizzero quando tutto ciò di cui hai bisogno è un cucchiaio. – tkone

+0

@AnApprentice se vuoi sottodomini, usa 'location.host'. Non c'è bisogno di regex a alla. – tkone

risposta

0
var domain = location.host.split('.').slice(-2); 

Se lo vuoi rimontato:

var domain = location.host.split('.').slice(-2).join('.'); 

Ma questo non funzionerà con co.uk o qualcosa del genere. Non c'è una regola dura o veloce per questo, nemmeno la regex lo determinerà.

+0

... dove 'location.host' è l'oggetto stringa – satoshi

+0

@satoshi' location.host' è la proprietà stringa dell'oggetto posizione. Fa riferimento ai dati tra "//" e il primo "/" nel tuo URL. È nei browser di IE6 e credo persino Netscape 4. – tkone

+0

Questo non funziona affatto. ' "Http://www.cnn.com/2012/02/16/world/american-nicaragua-prison/index.html" .split (' '). Slice (-2) .join ('.') '->' "it/2012/02/16/world/american-nicaragua-prigione/index.html" ' –

0

dato che ci sono domini di primo livello con i puntini a loro, per esempio "co.uk", non c'è modo per fare questo programatically a meno che non si include un elenco di tutti i TLD con i puntini a loro.

3
​var loc = document.createElement('a'); 

loc.href = 'http://www.cnn.com/2012/02/16/world/index.html'; 

​window.alert(loc.hostname);​ // alerts "cnn.com" 

Crediti per il metodo precedente:

Creating a new Location object in javascript

+0

Questo include il sottodominio. Fantastico trucco però. –

+0

problema è questo dà www. che non è desiderato .. – AnApprentice

+0

quindi: 'loc.hostname.split ('.'). slice (-2) .join ('.')' ma ti stai ancora rovinando l'intero '.co.uk 'tipo di dominio ... – tkone

-1
// something.domain.com -> domain.com 
function getDomain() { 
    return window.location.hostname.replace(/([a-z]+.)/,""); 
} 
+0

Informazioni sulla tua espressione regolare. A. non è necessario catturare un gruppo qui. B. stai cercando di abbinare un con un . che corrisponde anche a qualsiasi altro carattere (eccetto \ n) Quindi dovrebbe essere: window.location.hostname.replace (/ [a-z] + \ ./, "") –

0
function domain(input){ 
    var matches, 
     output = "", 
     urls = /\w+:\/\/([\w|\.]+)/; 

    matches = urls.exec(input); 

    if(matches !== null){ 
     output = matches[1]; 
    } 

    return output; 
} 
+0

Ti suggerisco di spiegare il tuo codice! –

Problemi correlati