簡體   English   中英

parens內的正則表達式匹配

[英]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 ); 

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

請參閱此處: 如何在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'));

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

您可能想要第一個捕獲組的結果。 比賽結束后,您可以獲得第一組:

(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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM