我的网址的参数值如下:
Nr=AND(OR(abc:def),OR(ghi:jkl),OR(mno:pqr)...)
使用下面的regex表达式成功提取上面的查询字符串,但它只返回第一个数组值For Ex。只得到数组中的abc和def值。
OR\(([^:]*):([^)]*)\)
我想将所有值提取为两个单独的数组值,如abc,ghi,mno和def,jkl,pqr ......
Plz在下面找到我的代码:
var getNrValue = 'AND(OR(Analyzed:abc),OR(Compounds:def),OR(Chemical:mno))';
var regex = /OR\(([^:]*):([^)]*)\)/gm;
var s = regex.exec(getNrValue);
console.log(s);
对此有何帮助?
答案 0 :(得分:1)
您可以使用此正则表达式:
([^():]+):([^():]+)
在regex demo中,右侧窗格显示捕获组。还有live JS demo。
使用此代码创建数组(请参阅live JS demo的输出):
var array1 = [];
var array2 = [];
var string = 'Nr=AND(OR(abc:def),OR(ghi:jkl),OR(mno:pqr)...)'
var string = 'Nr=AND(OR(abc:def),OR(ghi:jkl),OR(mno:pqr)...)'
var myregex = /([^():]+):([^():]+)/g;
var thematch = myregex.exec(string);
while (thematch != null) {
// add it to array of captures
array1.push(thematch[1]);
array2.push(thematch[2]);
document.write("left side: ",thematch[1],"<br />");
document.write("right side: ",thematch[2],"<br />");
// match the next one
thematch = myregex.exec(string);
}
<强>解释强>
([^():]+)
会向第1组捕获任何不是括号()
或冒号:
:
([^():]+)
会向第2组捕获不是括号()
或冒号:
如果您有疑问,请告诉我。 :)