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



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

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

这在某些情况下有效,其中假设任何以问号开头的组都是非捕获的。它还计算空组。

它不适用于字符类中包含的括号,或转义括号,以及可能的其他一些情况。

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

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

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

公认的答案是您应该在任何生产系统中使用的答案。但是,如果您想使用正则表达式来解决这个问题,您可以像下面所示的那样做。它假定您想要的组数的正则表达式是正确的。

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

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

你可以在www.debuggex.com上看到它是如何工作的

最新更新