[英]Regex match within parens
關於SO的問題有很多問題:括號內的匹配,parens等,但我想知道如何在一個字符(parens)中匹配而忽略該字符
"Key (email)=(basil@gmail.com) already exists".match(/\(([^)]+)\)/g)
// => ["(email)", "(basil@gmail.com)"]
我相信這是因為JS不支持[^)]
。 鑒於此,您如何建議在parens中提取值。
我更喜歡一些不那么討厭的東西,而不是必須在值上調用.replace('(', '').replace(')', '')
我希望返回值為["email", "basil@gmail.com"]
使用這兩個簡單的例子:
.match()
來提取和構造Array var arr = "Key (email)=(basil@gmail.com) already exists".match(/(?<=\\()[^)]+(?=\\))/g); console.log( arr );
https://regex101.com/r/gjDhSC/1
MDN - String.prototype.match()
.replace()
提取值並推送到Array var arr=[]; "Key (email)=(basil@gmail.com) already exists" .replace(/\\(([^)]+)\\)/g, (p1, p2) => arr.push(p2) ); console.log( arr );
請參閱此處: 如何在JavaScript正則表達式中訪問匹配的組?
結合@pherris的評論:
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'));
您可能想要第一個捕獲組的結果。 比賽結束后,您可以獲得第一組:
(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)
結果= [“email”,“basil@gmail.com”]
var str = "Key (email)=(basil@gmail.com) already exists";
var matches = [];
str.replace(/\((.*?)\)/g, function(g0,g1){matches.push(g1);})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.