2013-03-19 37 views
1

正則表達式大師,留意我的呼叫!正則表達式:從URL中提取GET變量

這可能是超級簡單的,但我畫了自己在一個心理角落。

以一個普通的URL,分割後的?,這就給出了一個像variable=val&interesting=something&notinteresting=somethingelse這樣的字符串我想提取的值爲interesting

我感興趣的變量的名稱可以是另一個變量的子字符串。 所以這場比賽應該是

  • 字符串或者開始或「&」字
  • 其次是「有趣=」
  • 其次我想捕捉
  • 後接另一個「&字符串「或字符串結尾

我嘗試了一些行 [\^&]interesting=(.*)[&$] ,但我什麼都沒......

更新 這是每一個Firefox插件來運行get請求,這意味着jQuery是不可用,如果可能的話,我想,以避免造成額外的字符串操作編寫一個函數。

對我來說,這種感覺就像一個普通的「正則表達式與字符串的提取部分」,但也許我錯了(正則表達式顯然不是我的偏強)

+0

不要重新發明輪子,使用庫:http://blog.stevenlevithan.com/archives/parseuri – georg 2013-03-19 10:57:27

+0

在原始問題中沒有明確說明,但這是在Firefox附加組件中使用的(因爲我真的認爲會有一個純粹的RegEx解決方案),並且由於各種內部原因,我真的想避免編寫一個函數來提取效率原因 – danneth 2013-03-19 11:57:33

回答

1

簡單的解決方案

var arr = "variable=val&interesting=something&notinteresting=somethingelse".split("&"); 
for(i in arr) { 
var splits = arr[i].split("="); 
if(splits[0]=="interesting") alert(splits[1]); 
} 

也單線匹配

"variable=val&interesting=something&notinteresting=somethingelse".match(/(?:[&]|^)interesting=((?:[^&]|$)+)/)[1] 
+0

如果我改變'interesting'的順序,單行匹配不起作用。和'不感興趣',那麼它給出的價值'somethingelse'而不是所需的'something'。但這是接近我正在尋找 – danneth 2013-03-19 12:02:51

+0

編輯正則表達式:)它現在應該工作 – 2013-03-19 12:59:52

+0

優秀!在字符串的開始,中間和結尾以及所有作品中測試所需的字段。謝謝。 – danneth 2013-03-19 13:12:43

0
function getValue(query) 
{ 
var obj=location.search.slice(1), 
    array=obj.split('&'), 
    len=array.length; 
    for(var k=0;k<len;k++) 
    { 
     var elm=array[k].split('='); 
     if(elm[0]==query)return elm[1]; 
    } 

} 

此功能直接提取查詢URL,並返回對應的VALU如果有的話。

//usage 
var get=getValue('interesting'); 
console.log(get);//something