簡體   English   中英

確定javascript正則表達式中有多少個捕獲組?

[英]Determine how many capturing groups are in a javascript regexp?

我正在開發一種實用程序,可將多個正則表達式合並為一個。 我想用函數支持替換,但這意味着捕獲組需要有一個偏移量,以便可以將正確的參數傳遞給替換器函數。 這是我找到的最簡單的解決方案:

function countCapturingGroups(regexp) {
  var count = 0;
  regexp.source.replace(/(\\*)\((\?:)?/g,
      function(full, backslashes, nonCapturing) {
    if (backslashes.length % 2 === 0 && !nonCapturing) {
      count++;
    }
  });
  return count;
}

這支持:

  1. 任意數量的反斜杠(偶數表示反斜杠本身已轉義)
  2. 非捕獲組,例如/(?:this)/

我是否在忽略其他使用不捕獲內容的括號的有效方法?

您可以在這里查看它的運行情況: http : //jsfiddle.net/theazureshadow/RHdPP/

function countCapturingGroups(regex) {
    var count = 0;
    regex.source.replace(/\[(?:\\.|[^\\\]])*\]|\\.|(\()(?!\?)/g,
        function (full, capturing) {
            if (capturing) count++;
        });
    return count;
}
  • \\[(?:\\\\.|[^\\\\\\]])*\\] -匹配字符類,例如[abc]
  • \\\\. —匹配轉義字符。
  • (\\()(?!\\?) —匹配不但不捕捉也不超前的括號。
  • 任何其他正則表達式構造都可以安全地跳過。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM