Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/447.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用JavaScript从带有JavaScript的字符串中删除注释_Javascript - Fatal编程技术网

使用JavaScript从带有JavaScript的字符串中删除注释

使用JavaScript从带有JavaScript的字符串中删除注释,javascript,Javascript,有一些字符串(例如“s”): 如何从“s”字符串中删除所有注释?我应该使用一些Regexp吗?我不知道。如果您想使用RegExp,您可以使用这个: /(\/\*[^*]*\*\/)|(\/\/[^*]*)/ 这将同时剥离/\n样式注释和/**/样式注释 完整工作代码: 使用多行字符串进行测试: 产出: before after 您可以使用此正则表达式匹配所有注释(支持俄罗斯符号。|拉丁文或西里尔文|) 进口“lodash”; //TODO认证提供程序 //导入“jquery”; /* 一

有一些字符串(例如“s”):


如何从“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: <!-- .....  -->