使用JavaScript从带有JavaScript的字符串中删除注释
有一些字符串(例如“s”):使用JavaScript从带有JavaScript的字符串中删除注释,javascript,Javascript,有一些字符串(例如“s”): 如何从“s”字符串中删除所有注释?我应该使用一些Regexp吗?我不知道。如果您想使用RegExp,您可以使用这个: /(\/\*[^*]*\*\/)|(\/\/[^*]*)/ 这将同时剥离/\n样式注释和/**/样式注释 完整工作代码: 使用多行字符串进行测试: 产出: before after 您可以使用此正则表达式匹配所有注释(支持俄罗斯符号。|拉丁文或西里尔文|) 进口“lodash”; //TODO认证提供程序 //导入“jquery”; /* 一
如何从“s”字符串中删除所有注释?我应该使用一些Regexp吗?我不知道。如果您想使用RegExp,您可以使用这个:
/(\/\*[^*]*\*\/)|(\/\/[^*]*)/
这将同时剥离/\n
样式注释和/**/代码>样式注释
完整工作代码:
使用多行字符串进行测试:
产出:
before
after
您可以使用此正则表达式匹配所有注释(支持俄罗斯符号。|拉丁文或西里尔文|)
进口“lodash”;
//TODO认证提供程序
//导入“jquery”;
/*
一些非常重要的评论
*/
删除所有评论
函数removeAllComments(){
var str=document.getElementById('code').innerHTML.replace(/(\/\*[\wа-а\'\s\r\n\*]*\*\*\*/)|(\/\/[\wа-а\s\'\\\\\\\]]**))|(\/\/\\/[\wаs\\\\\\\\\\\\\\\\\\\;
document.getElementById('code')。innerHTML=str;
}
console.log(`
var myStr='Ø!这\\'似乎是一个//注释';//但这实际上是真正的注释。
/*像这个*/var butNot='this/*one*/';//但是这个和/*这个*/
/*和*/var notThis=“one'//但是'\\'也\\'”;//*//这个*/
`
//1)将引号中的“/”替换为不可打印的ASCII“\1”字符
.replace(/(“([^\\”]|\\”*”)(“([^\\”]|\\”)*”)/g,(m)=>m.replace(//\//g,'\1'))
//2)清晰的评论
.replace(/(\/\*[^*]+\*\/)|(\/\/[^\n]+)/g',)
//3)恢复引号中的“/”
.替换(/\1/g,“/”)
);代码>在某些情况下,此选项不起作用
以下是我的解决方案:
str.replace(/\/\*[\s\s]*?\*\/\\/\\/\/.*/g');
从字符串中删除注释:
函数删除元素(字符串){
//接受一个代码字符串,而不是实际的函数。
返回字符串。replace(/\/\*[\s\s]*?\*\/\/\/\/.*/g')。trim();//带注释
}
常量注释代码=`
警报('您好,此代码有注释!')//警报
/*这里有一条评论*/
//换行符上的单行注释
`;
日志(removeComments(commentedcode))
comment1='我不喜欢单线评论。到解析。//我喜欢这个评论。”
comment2='我也讨厌多行注释
/*
喜欢
这个.*/'
注释1.替换(/\s*(?:\/\/).*?$/gm',)
//但不能用常规语法删除多行逗号。喜欢评论2
RegExp是基于正则语法的。这意味着常规语法分析器是一个finate状态机,不能保存状态,所以regexp不能像删除多个注释一样删除,只能删除一行注释
如果要删除多行注释,则必须编写解析器。或者使用其他非regexp的代码。您显示的代码是字符串的内容?是的,它的字符串值regex将获得大多数实例,但有关更多见解,请参见此()。因此:UglifyJS可以删除注释@MarkoS,你能为我提供完整的JS代码吗?我得到了错误“SyntaxError:无效的正则表达式:/(/*([^*]|[]|])(+([^*/]|[]))***+/)|(/)/:无需重复”@MarkoS你是对的,对不起。。。刚刚用更简单、更短且始终有效的代码更新了答案…:-)很抱歉,您的答案不支持多行/**/注释,可以添加吗?谢谢刚刚测试过,它似乎也可以处理多行注释。。。哪项测试失败了?你能给我完整的JS代码吗?当然是测试,因为它不适用于me@malcoauri好的,我已经更新了我的answer@malcoauri你试过我上次更新的评论吗?有什么问题吗?您是否可以编辑您的答案以显示完整的JS函数?@DanielL.VanDenBosch我已经编辑了答案以包含完整的函数!不会处理后面没有任何内容的注释,例如一行中的/
,但是我非常喜欢忽略引号中的注释的支持。如果你用公认的答案替换第二步,这是更好的选择。
var stringWithoutComments = s.replace(/(\/\*[^*]*\*\/)|(\/\/[^*]*)/g, '');
console.log(stringWithoutComments);
var s = `before
/* first line of comment
second line of comment */
after`;
var stringWithoutComments = s.replace(/(\/\*[^*]*\*\/)|(\/\/[^*]*)/g, '');
console.log(stringWithoutComments);
before
after
(\/\*[\wа-я\'\s\r\n\*]*\*\/)|(\/\/[\wа-я\s\'\;]*)|(\<![\-\-\s\wа-я\>\/]*\>)
Part1: (\/\*[\wа-я\'\s\r\n\*]*\*\/) for comments style: /* ..... */
Part2: (\/\/[\wа-я\s\'\;]*) for comments style: // .....
Part3: (\<![\-\-\s\wа-я\>\/]*\>) for comments style: <!-- ..... -->