2012-12-10 116 views
1

我試圖使用regExp來讀取URL參數。我需要在以下字符串進行匹配:正則表達式:與號之間的匹配字符串

SomeMoreText&action='{%22JsonParameter%22:[%221234%22]}'&SomeMoreText 

最終的結果應該是

      '{%22JsonParameter%22:[%221234%22]}' 

我gessing我需要一個表達&行動之間找到一切=及以下&。我嘗試了不同的表達方式,但沒有成功,說實話,我很難理解正則表達式語法。這裏的問題是冒號,引號(%22)和括號。如果它只是文字,我相信這樣的事情會起作用:

/action=([\w\-]+)/ 

任何人都可以幫忙嗎?

感謝

+0

我不是Regex Pro我自己(因此爲什麼我要把它作爲評論留下),但是你能否保持簡單並執行'。+ =('。+')。+'?。 EG:http://rubular.com/r/CIeIuizhMn –

回答

4

怎麼回合

var m = /action=([^&]+)/.exec(str); 
if (m) { 
    // The content is in m[1] 
} 

Live Example | Source

+2

這個答案和下面的一個,由布魯諾,是我最喜歡的解決方案。我希望我可以將它們標記爲正確的。但是,這個問題通過嚴格使用正則表達式來回答這個問題,所以我將其標記爲正確的答案。 – Ggilmann

+1

只需將它們兩個都投入使用,但是瞭解如何選擇其中之一;-) – PearsonArtPhoto

2

不要使用正則表達式,只是試試這個:

var n=str.split("&"); 
+0

是的,這是我的後備解決方案。但是,我使用的是Dojo(我將添加爲標籤),並且在dojoconfig文件中實現起來很複雜。 – Ggilmann

+0

這實際上並不輸出問題中指定的最終結果。 – Bruno

+1

像這樣,split必須比regExp快,但需要檢查。 位性能怎麼樣?spl = str.split('&')[1] .split('=')[1];' – dmi3y

0

您可以使用positive and negative look-ahead。他們分別是(?<= expression)(?= expression)

下面將做非貪婪尋找任何字符,.*?,即前面有「行動=」,(?<=action=),並且其次是「&」,(?=&)

完整的正則表達式是:(?<=action=).*?(?=&)

您可以測試這個here

0

您還可以使用

result = str.split("action=")[1]; 
result = result.substring(0, result.indexOf("&")); 

演示here

0

正如@PearsonArtPhoto以前說過,你可以簡單地使用拆分:

var results=str.split("&"); 

然後遍歷雖然結果數組象下面這樣:

for(i=0; i< results.length ; i++){ 
    if(results[i].split('=')[0] == 'action'){ // this condition to test that the key is 'action' 
    return results[i].split('=')[1]; 
    } 
} 

我希望這有助於。

相關問題