2012-02-02 108 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