JavaScript 获取正则表达式中子表达式的个数
正如标题所示,我厂有这么一个需求。我不会,老板鄙视我后丢过来一个链接:stackoverflow: Count the capture groups in a qr regex?
看不太懂 Perl,但是这个思路很棒。所以改写成 JS 版,并记录如下:
function countCapturingGroups(r){
r = new RegExp(`|${r.source}`);
const result = ''.match(r);
return result.length - 1;
}
const result = countCapturingGroups(/fo(.)b(..)/);
console.log(result); // 2
它的原理是这样的。构建一个新正则,包含两部分:空字符和目标正则。空字符正则会完成与目标字符串的匹配,保证有结果(不然的话就会返回 null。接下来 | 会保证后面的正则也是有效的,可以生成包含子表达式结果的数组。
我们知道,结果是个类数组,结构大约是:
- 全部匹配字符串
- 0~N 子表达式结果
- 其它一些属性
所以用其长度 – 1 就能获得子表达式的个数。从功耗上来说,这个应该是很节省了。
相关文章
【视频教程】技术栈大升级:Vue3 到 Nuxt3(4)深入理解 SSR 和 `useAsyncData`
2023 年,我个人最大的变化,是从 Vue3 SPA 应用向 Nuxt3 SSR 应用过渡,在预期可能存在 […]
2024-06-102 分钟
在 Code.fun 做 Code Review(四)
时光如梭,一晃 2022 年已经过去 2/3,我们一起迎来 9 月。秋风送爽,丹桂漂亮,下面,我们一起回顾 8 […]
2022-09-036 分钟
在 Code.fun 做 Code Review(三):聊聊 Promise 的错误处理、如何真正学到技术
嗯,不知不知觉这个系列写到第三篇,这一篇会改变一下写法,从一次 Code Review 出发,讲解几个技术点, […]
2022-08-2110 分钟


