正则如何匹配多个分组?

发布于 2022-09-06 04:41:13 字数 403 浏览 11 评论 0

代码如下,需要匹配 '+两位数字' 并捕获 其中两个数字,或匹配 '+{三位数字}' 并捕获其中三位数字;

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)才是捕获的三位数字。
因为 多个分组 用'|' 或的话, 是从 表达式开始 按 左括号顺序,进行分组编号。
请问下 多个分组 '或' 的话,怎么 不从表达式开始 进行分组编号,而是 单独分组编号?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

我乃一代侩神 2022-09-13 04:41:13

换个思路行么?

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}`);
})
你是暖光i 2022-09-13 04:41:13

你只要多加个判断是否为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];
});
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文