2009-08-14 15 views
35

Powinno to być bardzo proste (jeśli znasz odpowiedź). Od this questionWyodrębnij wartość parametru z adresu URL za pomocą wyrażeń regularnych.

Chcę dać rozwiązanie wysłanej wypróbować. Moje pytanie brzmi:

Jak uzyskać wartość parametru danego adresu URL przy użyciu wyrażeń regularnych JavaScript?

mam:

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

muszę:

Ahg6qcgoay4 

Próbowałem:

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

Ale: I ssać ...

+0

Checkout również to pytanie: http://stackoverflow.com/questions/738351/recommendation-for-javascript-url-manipulation-library-api – dfa

+0

@dfa: Być może będę potrzebował tego w przyszłości, dzięki za link t to wyrażenie prosto od razu :) – OscarRyz

+0

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

Odpowiedz

50

Prawie miał, wystarczy do ucieczki znaki specjalne 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 dla regex przez soupagain.

+2

Prawdopodobnie powinien również umieścić test jeśli mecz się nie powiedzie, np. var m = url.match (regex); id = (m && m.length> 1)? m [1]: null; – Tadmas

+0

Walczyłem z tym !! – OscarRyz

+3

Nie wiem, jak edytować odpowiedzi, ale powyższa odpowiedź jest niepoprawna, ponieważ nie zawiera identyfikatorów wideo zawierających znak - kreska. Dlatego też powinno być: /http\:\/\/www\.youtube\.com\/watch\?v=([\w-]{11})/ – soupagain

4

nie testowano, ale powinno praca:

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

niektóre adresy URL w serwisie youtube mają - jak również ... http://www.youtube.com/watch?v=22hUHCr-Tos – daniellmb

+0

@MyWhriledView Zaktualizowano dla łącznika –

6

v jest parametrem zapytania, technicznie należy wziąć pod uwagę przypadki, ala: http://www.youtube.com/watch?p=DB852818BF378DAC&v=1q-k-uN73Gk

w .NET polecam użyć System.Web.HttpUtility.ParseQueryString

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

I nawet nie trzeba sprawdzić klucz , ponieważ zwróci wartość null, jeśli klucz nie znajduje się w zbiorze.

+1

Ściśle mówiąc powinno to być var playlist = HttpUtility.ParseQueryString (nowy Uri (url) .Query) ["v"]; ponieważ ParseQueryString szuka łańcucha zapytania, a nie całego adresu URL. – kingdango

+0

Również w tym: http://stackoverflow.com/questions/20268544/portable-class-library-pcl-version-of-httputility-parsequerystring –

15

Dlaczego nie wziąć sznurek i podzielić ją

Przykład na URL

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

można zrobić podział jak

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

dostaniesz tablicę ciągów z params jak par wartości nazw z "=" jako ogranicznikiem.

+0

że jest oryginalny pomysł, +1 za to, ale ja polecam korzystania HttpUtility.ParseQueryString jeśli możesz żyć z odwoływaniem się do System.Web.dll i nie wymyślać koła –

1

Wiem, że pytanie jest stary i już odpowiedział, ale może to być również rozwiązanie

\b[\w-]+$ 

i sprawdziłem te dwa adresy URL

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

DEMO

0

używam oddzielne funkcje niestandardowe która pobiera wszystkie parametry URL i części adresów URL. Dla parametrów adresu URL (która jest końcową częścią łańcucha identyfikatora 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; 
    } 

Powyższy funkcja zwraca tablicę zawierającą zmiennych URL.

Dla URL części lub funkcji (co jest http://domain.tld/urlPart /? X = a & y = b Używam prostego uri rozłamu,

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

Można nawet połączyć je obie, aby móc używać pojedynczego połączenia na stronie lub w javascript.

Powiązane problemy