2009-08-14 666 views
35

這應該非常簡單(當您知道答案時)。來自this question使用正則表達式從url中提取參數值

我想給出發佈的解決方案一試。我的問題是:

如何使用JavaScript正則表達式獲取給定URL的參數值?

我:

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

我需要:

Ahg6qcgoay4 

我想:

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

但是:我吸...

+0

也簽出此問題:http://stackoverflow.com/questions/738351/recommendation-for-javascript-url-manipulation-library-api – dfa 2009-08-14 22:59:30

+0

@dfa:我將來可能需要這個,謝謝你的鏈接。我想我應該可能是ge這個正則表達式正確的第一個:) – OscarRyz 2009-08-15 00:35:03

+0

'/ v = [0-9A-Za-z] * /' http://stackoverflow.com/questions/11706986/php-getting-url-variable-with-preg-匹配 – bluesky 2015-06-30 04:02:34

回答

50

你幾乎擁有它,只需要轉義特殊字符的正則表達式:

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

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

編輯:修復了正則表達式的soupagain

+2

應該可能也應該進行測試如果匹配失敗,例如var m = url.match(regex); id =(m && m.length> 1)? m [1]:null; – Tadmas 2009-08-14 22:55:04

+0

我一直在努力! – OscarRyz 2009-08-14 23:09:03

+3

不知道如何編輯答案,但上述答案不正確,因爲包含 - 破折號字符的視頻ID失敗。 因此正則表達式應該是: /http::/\/www\.youtube\.com\/watch\?v=([\w-]{11})/ – soupagain 2010-02-11 08:57:11

4

沒有測試,但是這應該工作:

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

一些youtube網址有一個 - 以及,如... http://www.youtube.com/watch?v=22hUHCr-Tos – daniellmb 2009-08-14 23:18:01

+0

@MyWhriledView更新爲連字符 – 2009-08-14 23:33:29

6

v是一個查詢參數,在技術上就需要考慮ALA情況:http://www.youtube.com/watch?p=DB852818BF378DAC&v=1q-k-uN73Gk

在.NET中,我會建議使用System.Web.HttpUtility.ParseQueryString

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

而且你甚至都不需要檢查的關鍵,因爲如果密鑰不在集合中,它將返回null。

+1

嚴格地說這應該是var playlist = HttpUtility.ParseQueryString(new Uri(url).Query)[「v」];因爲ParseQueryString正在查找查詢字符串,而不是整個URL。 – kingdango 2013-01-25 19:32:21

+0

此外:http://stackoverflow.com/questions/20268544/portable-class-library-pcl-version-of-httputility-parsequerystring – 2015-09-07 11:33:35

15

你爲什麼不拿繩子,分裂它的URL

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

你可以做一個分裂爲

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

你會得到字符串數組使用參數爲

例名稱值以「=」作爲分隔符。

+0

這是一個原創的想法,爲+1,但我建議使用HttpUtility.ParseQueryString如果你可以忍受引用System.Web.dll,而不是重新發明輪子 – 2010-05-10 10:15:08

1

我知道這個問題是舊的,已經回答了,但是這也可能是一個解決方案

\b[\w-]+$ 

我查這兩個網址

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

DEMO

0

我使用單獨的自定義函數它獲取所有URL參數和URL部分。 對於URL參數(這是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; 
    } 

上述函數將返回由URL變量的陣列。

對於URL部分或函數,(這是http://domain.tld/urlpart/X =一個&計算y = b 我用一個簡單的URI分裂,

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

,你甚至可以將它們結合起來既能在頁面或javascript中使用單個調用。