正则表达式:计算代码注释中存在的所有“if”

时间:2016-10-28 06:38:42

标签: javascript regex

在以下代码的评论中计算 if 的编号。

function testLogicalAnd(val) {
  if(1){
    console.log('Print something');
    // if if
  }
  /*
    if
  */
  /*
    nothing
  */
  return "No";
}

评论中有3个 if 。 是否可以使用正则表达式来查找 if 的所有内容?

我尝试的是:

我必须在任何文本中找到 x y 之间 if 的数量。稍后我将替换x,y (//,\ n)表示单行注释或(/ *,* /)表示多行注释。

到目前为止我所尝试的是:

  • /x[^xy]*(if)[^xy]*y/g ==>如果
  • ,只能抓取1个
  • /x[^xy(if)]*(if)[^xy(if)]*y/g ==>捕获x-y范围,其中1如果存在不超过1
  • /x[[^xy(if)](if)[^xy(if)]]*y/g ==>不配。

我尝试了上述更多的排列。但我无法将所有这些如果分组 检查here

示例文字:

  

abcdifnoifd的 X 如果如果 LLY fffnoifdded的 xdslk 如果ý dadad XY

     

结果 3

我的问题是,是否有可能实现这样的正则表达式?如果是,那我该怎么做分组

1 个答案:

答案 0 :(得分:1)

您可以使用此代码:

const regex = /(?=\/\/).*\bif\b|\/\*(?=[\S\s]*\bif\b[\S\s]*)[\S\s]*?\*\//g;
const str = `function testLogicalAnd(val) {
  if(1){//
    console.log('Print something');
    // if if
  }
  /*
    if
  */
  /*
    nothing
  */
  return "No";
}`;
let m;
let count = 0;
while ((m = regex.exec(str)) !== null) {
    // This is necessary to avoid infinite loops with zero-width matches
    if (m.index === regex.lastIndex) {
        regex.lastIndex++;
    }
    
    // The result can be accessed through the `m`-variable.
    m.forEach((match, groupIndex) => {
        console.log(`Found match, group ${groupIndex}: ${(match.match(/\bif\b/g) || []).length}`);
        count += (match.match(/\bif\b/g) || []).length;
    });
}
console.log(`The keyword if is present ${count} times`)