我需要在javascript中使用正则表达式来匹配网址中的某些文字。
以下是一个例子:
“qty1 = 0&安培; qty2 = 0&安培; qty3 = 0&安培;”
我希望匹配'='之后和'&'之前的文本(数字)只要字符串中出现'qty'字样。每次生成网址时,文本(编号)都会发生变化,所以我希望匹配新文本(数字)的所有内容。
我可以用什么正则表达式来解决这个问题?
任何帮助将不胜感激!
答案 0 :(得分: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);
}
注意正则表达式末尾的/ g,在某些javascript实现中,如果没有它,最终会出现无限循环。
答案 1 :(得分: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+"'!")
}
}
答案 2 :(得分: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的数字,例如10,11