关于SO的问题有很多问题:括号内的匹配,parens等,但我想知道如何在一个字符(parens)中匹配而忽略该字符
"Key (email)=(basil@gmail.com) already exists".match(/\(([^)]+)\)/g)
// => ["(email)", "(basil@gmail.com)"]
我相信这是因为JS不支持[^)]
。鉴于此,您如何建议在parens中提取值。
我更喜欢一些不那么讨厌的东西而不是在值上调用.replace('(', '').replace(')', '')
我希望返回值为["email", "basil@gmail.com"]
答案 0 :(得分:4)
使用这两个简单的例子:
.match()
提取和构造数组
var arr = "Key (email)=(basil@gmail.com) already exists".match(/(?<=\()[^)]+(?=\))/g);
console.log( arr );
&#13;
https://regex101.com/r/gjDhSC/1
MDN - String.prototype.match()
.replace()
提取值并推送到数组
var arr=[];
"Key (email)=(basil@gmail.com) already exists"
.replace(/\(([^)]+)\)/g, (p1, p2) => arr.push(p2) );
console.log( arr );
&#13;
答案 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'));
答案 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);})