2009-08-14 6 views
35

Cela devrait être très simple (lorsque vous connaissez la réponse). De this questionExtraire la valeur du paramètre de l'URL en utilisant les expressions régulières

Je veux essayer la solution affichée. Ma question est:

Comment obtenir la valeur de paramètre d'une URL donnée en utilisant des expressions régulières JavaScript?

je:

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

J'ai besoin:

Ahg6qcgoay4 

J'ai essayé:

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

Mais: je suce ...

+0

checkout aussi cette question: http://stackoverflow.com/questions/738351/recommendation-for-javascript-url-manipulation-library-api – dfa

+0

@dfa: J'en aurais peut-être besoin dans le futur, merci pour le lien. t cette première regexp droite d'abord :) – OscarRyz

+0

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

Répondre

50

Tu as presque eu, juste besoin d'échapper les caractères spéciaux regex:

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

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

Edit: Fix pour regex par soupagain.

+2

Devrait probablement aussi mettre dans un test pour si la correspondance échoue, par exemple var m = url.match (regex); id = (m && m.length> 1)? m [1]: null; – Tadmas

+0

Je luttais avec ça !! – OscarRyz

+3

Je ne sais pas comment modifier les réponses, mais la réponse ci-dessus est incorrecte, car elle échoue avec les ID vidéo contenant le caractère - tiret. Par conséquent, le regex devrait être: /http\:\/\/www\.youtube\.com\/watch\?v=([\w-]{11})/ – soupagain

4

Non testé mais cela ne devrait travail:

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

certaines URL youtube ont un - ainsi, comme ... http://www.youtube.com/watch?v=22hUHCr-Tos – daniellmb

+0

@MyWhriledView Mis à jour pour le trait d'union –

6

v est un paramètre de requête, techniquement, vous devez considérer les cas ala: http://www.youtube.com/watch?p=DB852818BF378DAC&v=1q-k-uN73Gk

Dans .NET Je recommande d'utiliser System.Web.HttpUtility.ParseQueryString

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

Et vous ne même pas besoin de vérifier la clé , car il retournera null si la clé n'est pas dans la collection.

+1

à proprement parler cela devrait être var playlist = HttpUtility.ParseQueryString (nouveau Uri (url) .Query) ["v"]; parce que ParseQueryString recherche une chaîne de requête, pas une URL entière. – kingdango

+0

Aussi: http://stackoverflow.com/questions/20268544/portable-class-library-pcl-version-of-httputility-parsequerystring –

15

Pourquoi ne vous prenez la corde et le diviser

Exemple sur l'url

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

vous pouvez faire une scission comme

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

Vous obtiendrez tableau de chaînes avec params comme nommez les paires de valeurs avec "=" comme délimiteur.

+0

c'est une idée originale, +1 pour cela, mais je recommande d'utiliser HttpUtility.ParseQueryString si vous pouvez vivre avec référencement System.Web.dll, et ne pas réinventer la roue –

1

Je sais que la question est vieux et déjà répondu, mais cela peut aussi être une solution

\b[\w-]+$ 

et j'ai vérifié ces deux URL

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

DEMO

0

J'utilise des fonctions personnalisées séparées qui obtient tous les paramètres d'URL et les parties d'URL. Pour les paramètres d'URL (qui est la dernière partie d'une chaîne d'URI, http://domain.tld/urlpart/?x = y = un & b

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

La fonction ci-dessus retourne un tableau de variables constitué d'URL.

Pour les pièces d'URL ou de fonctions, (qui est http://domain.tld/urlPart /? X = a & y = b j'utiliser une simple scission uri,

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

Vous pouvez même les combiner à la fois pour être en mesure à utiliser avec un seul appel dans une page ou en javascript

Questions connexes