在以下代码的评论中计算 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
==>如果/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 。
答案 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`)