鍍金池/ 問答/Java  網(wǎng)絡(luò)安全  HTML/ 正則如何匹配多個分組?

正則如何匹配多個分組?

代碼如下,需要匹配 '+兩位數(shù)字' 并捕獲 其中兩個數(shù)字,或匹配 '+{三位數(shù)字}' 并捕獲其中三位數(shù)字;

var a='+12+{123}+{123}+12+12+{123}'
a.replace(/\+([\d]{2})|\+{([\d]{3})}/gi,(x,y,z)=>{
console.log(x);
console.log(y);
console.log(z);
})

如果這樣用'|'分割表達(dá)式的話,即使匹配的是'+{三位數(shù)字}',也會傳給 第一個捕獲分組(y)undefined,第二個(z)才是捕獲的三位數(shù)字。
因為 多個分組 用'|' 或的話, 是從 表達(dá)式開始 按 左括號順序,進(jìn)行分組編號。
請問下 多個分組 '或' 的話,怎么 不從表達(dá)式開始 進(jìn)行分組編號,而是 單獨分組編號?

回答
編輯回答
挽歌

你只要多加個判斷是否為undefined就行了,然后取那個不是undefined的
或者可以這么寫【參考】:

var str="+12+{123}+{123}+12+{123}+12+{123}+{123,098}+123+6787+543";
var result=str.match(/\+(\d{2}\b|{\d{3}})/g).map(function(matchStr){
return matchStr.match(/\d+/)[0];
});
2018年7月19日 21:29
編輯回答
拼未來

換個思路行么?

var a='+12+{123}+{123}+12+12+{123}'
a.replace(/(\d{2,3})/gi,(x,y,z)=>{
console.log(`x:${x}`);
console.log(`y:${y}`);
console.log(`z:${z}`);
})
2018年6月13日 22:07