正则表达式计算正则表达式中捕获组的数量

Bil*_*oon 16 javascript regex

我需要一个正则表达式来检查任意正则表达式(作为一个字符串),返回捕获组的数量.到目前为止我有......

arbitrary_regex.toString().match(/\((|[^?].*?)\)/g).length
Run Code Online (Sandbox Code Playgroud)

这适用于某些情况,其中假设任何以问号开头的组都是非捕获的.它也算空组.

它不适用于字符类或转义括号中包含的括号,也可能适用于其他一些场景.

And*_*ark 26

修改你的正则表达式,使它匹配一个空字符串,然后匹配一个空字符串,看看它返回多少组:

var num_groups = (new RegExp(regex.toString() + '|')).exec('').length - 1;
Run Code Online (Sandbox Code Playgroud)

示例:http://jsfiddle.net/EEn6G/

  • 为什么`regex.toString()`?包含斜杠,不需要包含在新的正则表达式中.我认为`regex.source`会好一些. (8认同)