parens内的正则表达式匹配

时间:2015-11-11 23:28:39

标签: javascript regex

关于SO的问题有很多问题:括号内的匹配,parens等,但我想知道如何在一个字符(parens)中匹配而忽略该字符

"Key (email)=(basil@gmail.com) already exists".match(/\(([^)]+)\)/g)
// => ["(email)", "(basil@gmail.com)"]

我相信这是因为JS不支持[^)]。鉴于此,您如何建议在parens中提取值。

我更喜欢一些不那么讨厌的东西而不是在值上调用.replace('(', '').replace(')', '')

我希望返回值为["email", "basil@gmail.com"]

4 个答案:

答案 0 :(得分:4)

大括号()之间提取文字而不返回大括号

使用这两个简单的例子:

使用.match()提取和构造数组



var arr = "Key (email)=(basil@gmail.com) already exists".match(/(?<=\()[^)]+(?=\))/g);

console.log( arr );
&#13;
&#13;
&#13;

https://regex101.com/r/gjDhSC/1
MDN - String.prototype.match()

使用.replace()提取值并推送到数组

&#13;
&#13;
var arr=[];

"Key (email)=(basil@gmail.com) already exists"
    .replace(/\(([^)]+)\)/g, (p1, p2) => arr.push(p2) );

console.log( arr );
&#13;
&#13;
&#13;

https://regex101.com/r/gjDhSC/2
MDN - String.replace()

答案 1 :(得分:2)

见这里:How do you access the matched groups in a JavaScript regular expression?

与@ pherris&#39;结合使用评价:

var str = "Key (email)=(basil@gmail.com) already exists";
var rx = /\((.+?)\)/ig;
match = rx.exec(str);
alert(match[1]);
while (match !== null) {
   match = rx.exec(str);
   alert(match[1]);
}

JSfiddle:https://jsfiddle.net/60p9zg89/(将生成弹出窗口)

这会多次执行正则表达式,返回捕获的字符串(在括号中)。

向浏览器发送警报并不是非常有用,您指定返回一个数组 - 所以:

function rxGroups(rx, str) {
   var matches = new Array();
   match = rx.exec(str);
   while (match != null) {
      matches.push(match[1]);
      match = rx.exec(str);
   }
   return matches;
}

var x = rxGroups(
   /\((.+?)\)/ig,
   "Key (email)=(basil@gmail.com) already exists"
);

alert(x.join('\n'));

https://jsfiddle.net/60p9zg89/1/

答案 2 :(得分:0)

您可能想要第一个捕获组的结果。比赛结束后,您可以获得第一组:

(function(s, x) {
 return s.match(x)
    .map(function(m) {
      var f = m.match(x);
      return RegExp.$1;
    });
})('Key (email)=(basil@gmail.com) already exists', /\(([^()]+)\)/g)

结果= [&#34;电子邮件&#34;,&#34; basil@gmail.com"]

答案 3 :(得分:0)

var str = "Key (email)=(basil@gmail.com) already exists";
var matches = [];
str.replace(/\((.*?)\)/g, function(g0,g1){matches.push(g1);})