替换查询字符串使用Regex仅返回第一个数组值?

时间:2014-06-24 06:15:48

标签: javascript regex

我的网址的参数值如下:

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);

对此有何帮助?

1 个答案:

答案 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组捕获不是括号()或冒号:
  • 的任何字符
  • 代码检索第1组和第2组匹配并将它们推送到两个数组

如果您有疑问,请告诉我。 :)