我正在研究一种将多个正则表达式合并为一个的实用程序。我想支持用函数替换,但这意味着我需要为捕获组设置一个偏移量,以便我可以将正确的参数传递给替换函数。这是我找到的最简单的解决方案:
function countCapturingGroups(regexp) {
var count = 0;
regexp.source.replace(/(\\*)\((\?:)?/g,
function(full, backslashes, nonCapturing) {
if (backslashes.length % 2 === 0 && !nonCapturing) {
count++;
}
});
return count;
}
这支持:
- 任意数量的反斜杠(偶数表示反斜杠本身已转义)
- 非捕获组,例如
/(?:this)/
我是否忽略了使用不会捕获内容的括号的任何其他有效方法?
你可以在这里看到它的作用:http: //jsfiddle.net/theazureshadow/RHdPP/