我需要解析一些代码。
首先,我需要删除 Comment Out 范围。
我使用javascript的拆分功能:
var ss = input.split(separator);
注释掉表示为
// .... \n
/* .... */
什么是正则表达式的分隔符?
我需要解析一些代码。
首先,我需要删除 Comment Out 范围。
我使用javascript的拆分功能:
var ss = input.split(separator);
注释掉表示为
// .... \n
/* .... */
什么是正则表达式的分隔符?
您可以使用它regex
来替换评论
var pattern=new RegExp("//.*?(?=[\\n\\r]+|$)|/[*].*?[*]/","g");
但请记住,如果字符串本身包含这些字符,它将不起作用
正如 zerkms 和 Anirudh 建议的那样,Strings like
var foo = "//it's not a comment";
是有问题的。
我想到的一种解决方案是
首先使用另一个正则表达式选择“字符串”。
在选定的“字符串”中,将注释符号的字符替换为一些古怪的字符串,例如“!@#$wacky1”,“!@#$wacky2”等。
替换本问答的操作。注释掉。
将 "!@#$wacky" 替换为 // \n 等。
完毕
编辑
感谢阿尼鲁德:
var regex = new RegExp("//.*?(?=[\\n\\r]+|$)|/[](.|\n)?[*]/","g");
工作代码
Array.prototype.last = function (n)
{
return this[this.length - 1 - n];
}
String.prototype.replaceAll = function (org, dest)
{
return this.split(org).join(dest);
}
var read = function (input)
{
var cmtprts = ['//', '/*', '*/', '(', ')'];
var cmtprtsE = cmtprts.map(function (s, i)
{
return "thisisareplacement" + i;
});
//==========================
var strgs = input.match(/"(?:[^\\"]|\\.)*"/ig);
var strgs1 = [];
var input1 = [];
// escape cmtprts during each Strings
if (strgs)
{
strgs.map(function (str, str_i)
{
var str1 = [];
cmtprts.map(function (mark, mark_i)
{
if (mark_i == 0)
{
str1[mark_i] = str.replaceAll(mark, cmtprtsE[mark_i]);
}
else
{
str1[mark_i] = str1[mark_i - 1].replaceAll(mark, cmtprtsE[mark_i]);
}
})
strgs1[str_i] = str1.last(0);
if (str_i == 0)
{
input1[str_i] = input.replaceAll(strgs[str_i], strgs1[str_i]);
}
else
{
input1[str_i] = input1[str_i - 1].replaceAll(strgs[str_i], strgs1[str_i]);
}
});
}
// comment out removing
var re2 = new RegExp("//.*?(?=[\\n\\r]+|$)|/[*](.|\n)*?[*]/", "g");
var input2 = input1.last(0).replaceAll(re2, '');
// "thisisareplacement"+i back to normal string
var input3 = [];
cmtprtsE.map(function (mark, mark_i)
{
if (mark_i == 0)
{
input3[mark_i] = input2.replaceAll(mark, cmtprts[mark_i]);
}
else
{
input3[mark_i] = input3[mark_i - 1].replaceAll(mark, cmtprts[mark_i]);
}
})
return input3.last(0);
}