2009-08-14 10 views
35

Esto debería ser muy simple (cuando sabes la respuesta). De this questionExtrae el valor del parámetro de la url usando las expresiones regulares

Quiero probar la solución publicada. Mi pregunta es:

¿Cómo obtener el valor del parámetro de una URL determinada utilizando expresiones regulares de JavaScript?

tengo:

http://www.youtube.com/watch?v=Ahg6qcgoay4 

que necesito:

Ahg6qcgoay4 

me trataron:

http://www.youtube.com/watch\\?v=(w{11}) 

Pero: Me chupan ...

+0

checkout también esta pregunta: http://stackoverflow.com/questions/738351/recommendation-for-javascript-url-manipulation-library-api – dfa

+0

@dfa: Puede que necesite eso en el futuro, gracias por el enlace. Creo que probablemente debería ge t esta regexp derecha primero :) – OscarRyz

+0

'/ v = [0-9A-Za-z] * /' http://stackoverflow.com/questions/11706986/php-getting-url-variable-with-preg- coincidencia – bluesky

Respuesta

50

Casi lo tenía, sólo tiene que escapar caracteres especiales de expresiones regulares:

regex = /http\:\/\/www\.youtube\.com\/watch\?v=([\w-]{11})/; 

url = 'http://www.youtube.com/watch?v=Ahg6qcgoay4'; 
id = url.match(regex)[1]; // id = 'Ahg6qcgoay4' 

Editar: Arreglo para expresiones regulares por soupagain.

+2

Probablemente también deba poner una prueba para si la coincidencia falla, como var m = url.match (regex); id = (m && m.length> 1)? m [1]: nulo; – Tadmas

+0

¡Estaba luchando con eso! – OscarRyz

+3

No sé cómo editar respuestas, pero la respuesta anterior es incorrecta, ya que falla con identificadores de video que contienen el carácter - dash. Por lo tanto, la expresión regular debería ser: /http\:\/\/www\.youtube\.com\/watch\?v=([\w-]{11})/ – soupagain

4

no han sido evaluados pero esto debe trabajo:

/\?v=([a-z0-9\-]+)\&?/i 
+0

algunas urls de youtube tienen también una, como ... http://www.youtube.com/watch?v=22hUHCr-Tos – daniellmb

+0

@MyWhriledView Actualizado para el guión –

6

v es un parámetro de consulta, técnicamente es necesario considerar los casos de ala: http://www.youtube.com/watch?p=DB852818BF378DAC&v=1q-k-uN73Gk

En .NET recomendaría utilizar System.Web.HttpUtility.ParseQueryString

HttpUtility.ParseQueryString(url)["v"]; 

Y usted ni siquiera necesita para comprobar la clave , ya que devolverá nulo si la clave no está en la colección.

+1

Estrictamente hablando, esto debería ser var playlist = HttpUtility.ParseQueryString (new Uri (url) .Query) ["v"]; porque ParseQueryString está buscando una cadena de consulta, no una URL completa. – kingdango

+0

También esto: http://stackoverflow.com/questions/20268544/portable-class-library-pcl-version-of-httputility-parsequerystring –

15

¿Por qué no se toma la cadena, que se dividió

ejemplo en la url

var url = "http://www.youtube.com/watch?p=DB852818BF378DAC&v=1q-k-uN73Gk" 

que puede hacer una división tan

var params = url.split("?")[1].split("&"); 

Usted recibirá matriz de cadenas con params como nombrar pares de valores con "=" como el delimitador.

+0

que es una idea original, +1 para eso, pero recomiendo usar HttpUtility.ParseQueryString si puedes vivir haciendo referencia a System.Web.dll, y no reinventar la rueda –

1

Sé que la pregunta es antiguo y ya ha respondido, pero esto también puede ser una solución

\b[\w-]+$ 

y he comprobado estas dos direcciones URL

http://www.youtube.com/watch?v=Ahg6qcgoay4 
https://www.youtube.com/watch?v=22hUHCr-Tos 

DEMO

0

utilizo funciones personalizadas separadas que obtiene todos los parámetros de URL y partes de URL. Para los parámetros de URL, (que es la parte final de una cadena de URI, http://domain.tld/urlpart/?x = a & y = b

function getUrlVars() { 
    var vars = {}; 
    var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m,key,value) { 
     vars[key] = value; 
    }); 
    return vars; 
    } 

La función anterior devolverá una matriz que consiste de variables de URL.

por las piezas o funciones de URL, (que es http://domain.tld/urlPart /? X = a & y = b utilizo un simple división uri,

function getUrlParams() { 
    var vars = {}; 
    var parts = window.location.href.split('/'); 
    return parts; 
} 

Usted puede incluso combinar los dos para poder para usar con una sola llamada en una página o en javascript.

Cuestiones relacionadas