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

时间:2013-04-16 20:37:31

标签: javascript regex

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

arbitrary_regex.toString().match(/\((|[^?].*?)\)/g).length

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

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

2 个答案:

答案 0 :(得分:25)

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

var num_groups = (new RegExp(regex.toString() + '|')).exec('').length - 1;

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

答案 1 :(得分:2)

接受的答案是您应该在任何生产系统中使用的答案。但是,如果您想使用正则表达式来解决它,那么您可以执行此操作,如下所示。它假定您想要的正则表达式组是正确的。

请注意,组的数量只是正则表达式中非文字(的数量。我们要采取的策略不是匹配所有正确的(,而是对他们之间的所有错误内容进行拆分

re.toString().split(/(\(\?|\\\[|\[(?:\\\]|.)*?\]|\\\(|[^(])+/g).length - 1

您可以在www.debuggex.com上查看其工作原理。