2012-02-02 96 views
0

我需要在JavaScript中使用正則表達式來匹配url中的某些文本。使用javascript正則表達式來捕獲url中的文本

下面是一個例子:

「qty1 = 0 & qty2 = 0 & qty3 = 0 &」

我要匹配的文本(號碼)之後的 '=' 和前的附帶'&'只要字符串中出現'qty'字樣。每次生成url時,文本(數字)都會更改,所以我想匹配新的文本(數字)。

我可以用什麼正則表達式來解決這個問題?

任何幫助,將不勝感激!

+0

我需要澄清一下。匹配是錯誤的詞語,我的道歉。只要在文本字符串中出現「qty」時,我就需要使用正則表達式來查找任何文本(數字)在「=」和「&」之間。然後我需要將這個文本(數字)存儲在一個變量中,以便我可以對它運行一些條件語句。 – gijoe426 2012-02-02 03:40:48

回答

1
var queryStr = "qty1=0&qty2=0&qty3=0"; 
var regex = /qty(\d+)=(\d+)/g; 
var match = regex.exec(queryStr); 
while(match != null){ 
    var numBeforeEquals = match[1]; 
    var numAfterEquals = match[2]; 
    // do your comparison, for example, if it's > 0: 
    if(numAfterEquals > 0){ 
    // do something 
    } 
    match = regex.exec(queryStr); 
} 

請注意/正則表達式的結尾處,在一些JavaScript實現中,如果沒有它,最終會出現無限循環。

0

下面是一個替代解決方案(在工作URL中)。我稱之爲替代方案,因爲我使用了表達式的兩部分,我認爲它可以被優化。

var breakdown = "http://local/?wtf=omg&qty12=a&qty2=b&qty3=4&test=5".match(/qty[0-9]{0,9999}(.*?)&/ig); 
for(var i in breakdown) { 
    var v = breakdown[i].match(/qty[0-9]{0,9999}\=(.*?)&/i)[1]; 
    if(v == 4 || v == "a") { 
     alert("Found '"+v+"'!") 
    } 
} 

工作實例:http://jsfiddle.net/MattLo/FxDyg/

+0

這幾乎就是我所需要的。有沒有辦法改變正則表達式來匹配「qty」和「=」之後的任何數字?現在它只檢查數字0-9。另外,是否有一種方法可以單獨捕獲每個值,以便我可以針對每個值運行條件if語句以運行單獨的代碼塊? – gijoe426 2012-02-02 04:25:21

+0

是的,是的,我更新了片段接受高達9999和一個區域爲您的條件陳述 – 2012-02-02 04:36:02

0

試試這個

var regex = /qty[\d]+=(\d+)/g, 
    text = "qty1=5&qty2=7&qty3=8&"; 

while(match = regex.exec(text)) { 
    console.log(match[1]); 
} 

@ggreiner失蹤+\d,使上面的腳本不低於9號greather例如工作10,11

+0

這絕對給我的數字超過0-9之間「qty」和「=」以及「=」和「&」(據我所知)。但正則表達式與「0」,「0」,「0」中的「=」之後的數字匹配「qty1 = 0」,「qty2 = 0」,「qty3 = 0」。 – gijoe426 2012-02-02 04:42:29

+0

你錯過了我的觀點'比賽[1]'這是你想要的(只匹配那個數字)。 – Rezigned 2012-02-02 06:04:13