为了账号安全,请及时绑定邮箱和手机立即绑定

正则如何匹配多个分组?

正则如何匹配多个分组?

慕桂英546537 2019-02-11 16:15:09
代码如下,需要匹配 '+两位数字' 并捕获 其中两个数字,或匹配 '+{三位数字}' 并捕获其中三位数字;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);})如果这样用'|'分割表达式的话,即使匹配的是'+{三位数字}',也会传给 第一个捕获分组(y)undefined,第二个(z)才是捕获的三位数字。因为 多个分组 用'|' 或的话, 是从 表达式开始 按 左括号顺序,进行分组编号。请问下 多个分组 '或' 的话,怎么 不从表达式开始 进行分组编号,而是 单独分组编号?
查看完整描述

2 回答

?
慕盖茨4494581

TA贡献1850条经验 获得超11个赞

换个思路行么?


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}`);

})


查看完整回答
反对 回复 2019-02-22
?
萧十郎

TA贡献1815条经验 获得超12个赞

你只要多加个判断是否为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];

});


查看完整回答
反对 回复 2019-02-22
  • 2 回答
  • 0 关注
  • 1393 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信