2012-02-20 10 views
5

Dada una cadena con los URL en los siguientes formatos:Dada una URL como una cadena, ¿cómo extraer solo el dominio y la extensión?

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, ¿cómo puedo extraer de la cadena acaba de cnn.com para todos ellos? ¿Dominio de nivel superior más extensión?

Gracias

+1

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

+0

Por qué molestarse con la expresión regular. Es una navaja suiza cuando todo lo que necesitas es una cuchara. – tkone

+0

@AnApprentice si quieres subdominios, simplemente usa 'location.host'. No hay necesidad de expresiones regulares en alla. – tkone

Respuesta

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

Si quieres que vuelve a montar:

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

Pero esto no funcionarán con co.uk o algo así. No hay una regla dura ni rápida para esto, ni siquiera la expresión regular determinará eso.

+0

... donde 'location.host' es la cadena de asunto – satoshi

+0

@satoshi' location.host' es la propiedad de cadena del objeto de ubicación. Se refiere a los datos entre '//' y el primer '/' en su URL. Está en navegadores de vuelta a IE6 y creo que incluso Netscape 4. – tkone

+0

Esto no funciona en absoluto. '" http://www.cnn.com/2012/02/16/world/american-nicaragua-prison/index.html ".split ('.'). slice (-2) .join ('.') '->' "com/2012/02/16/world/american-nicaragua-prison/index.html" ' –

0

Dado que hay dominios de nivel superior con puntos en ellos, por ejemplo "co.uk", no hay forma de hacerlo programáticamente a menos que incluya una lista de todos los TLD con puntos en ellos.

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" 

Créditos para el método anterior:

Creating a new Location object in javascript

+0

Esto incluye el subdominio. Genial truco sin embargo. –

+0

problema es esto da www. que no es deseado ... – AnApprentice

+0

por lo tanto: 'loc.hostname.split ('.'). slice (-2) .join ('.')' pero todavía te vas a enfadar con todo el '.co.uk 'tipo de dominio ... – tkone

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

Acerca de su expresión regular. A. no necesitas capturar un grupo aquí. B. estás tratando de unir a. con un . que coincide con cualquier otro carácter también (excepto \ n) Así que esto debería ser: 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

¡Te sugiero que expliques tu código! –

Cuestiones relacionadas