>我需要解析一些代码。
首先,我需要删除注释范围。
我使用javascript的拆分功能:
var ss = input.split(separator);
注释掉表示为
// .... n
/* .... */
什么是正则表达式的分隔符?
您可以使用
此regex
替换注释
var pattern=new RegExp("//.*?(?=[\n\r]+|$)|/[*].*?[*]/","g");
但请记住,如果字符串本身包含这些字符,它将不起作用
正如 zerkms 和 Anirudh 所建议的那样,字符串喜欢
var foo = "//it's not a comment";
是有问题的。
我想到的一个解决方案是
首先使用另一个正则表达式选择"字符串"。
在选定的"字符串"中,将注释符号的字符替换为一些古怪的字符串,例如"!@#$wacky 1","!@#$wacky 2" 等。
替换此问答的操作注释掉。
将"!@#$wacky"的重新系回// 等。
做
编辑
感谢阿尼鲁德:
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);
}