我需要解析一些代码。
对于首发,我需要删除注释范围。
我使用javascript的分割功能:
var ss = input.split(separator);
注释表示为
// .... \n
/* .... */
分隔符是什么样的正则表达式?
答案 0 :(得分:1)
您可以使用此regex
替换评论
var pattern=new RegExp("//.*?(?=[\\n\\r]+|$)|/[*].*?[*]/","g");
但请记住,如果字符串本身包含那些字符
,它将无法工作答案 1 :(得分:1)
正如zerkms和Anirudh所说,Strings就像
var foo = "//it's not a comment";
是有问题的。
我想到的一个解决方案是
选择" Strings"首先使用另一个正则表达式。
在选定的" Strings"中,将注释符号的字符替换为某些古怪的字符串,例如 "!@#$ wacky1""!@#$ wacky2"等
更换此Q& A的操作。评论出来。
退回"!@#$ wacky"那些// \ n等。
完成
修改强>
感谢Anirudh:
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);
}