我正在寻找一些工具来从Javascript源中删除冷却。我能够谷歌一些,但他们都没有满足以下要求:其他所有内容应保持不变,特别是空白不会被删除,但如果注释占整行,该行也被删除
很快,我希望能够从带有注释的格式良好的源到具有相同格式的源而无需注释。将删除仅包含注释的行,并将跟踪注释与尾随空格一起删除。其余的都保持不变。
你知道这项工作有什么工具吗?
编辑:我尝试更具体。使用正则表达式是不可能的,因为字符//
或/*
也可以出现在字符串,正则表达式等中。
该工具应该接受此输入
var a = true;
//the following code is every useful
var b = 2;//really, really useful
/**
Never, ever do this
var c = 3;
*/
var d = 4;
并提供此输出
var a = true;
var b = 2;
var d = 4;
答案 0 :(得分:12)
这是我掀起的一些代码: 看看:here
另外here是我的代码示例,您可以在网页中立即测试
这是我没有写的一个方便的,虽然他的代码在某些正则表达式文字中会失败:http://james.padolsey.com/javascript/removing-comments-in-javascript/
编辑: 我写的代码就是这样。我没有更新它,因为它是我十几岁时写的东西而且是编程的新手。如果有错误,您可以修复它。
答案 1 :(得分:8)
将Google的Closure Compiler与WHITE_SPACE_ONLY和PRETTY_PRINT一起使用 - 它唯一要做的就是删除注释(除非您不以PRETTY_PRINT的方式格式化代码。)
它变成了这个:
// This function alerts a name
function hello(name) {
/**
* One lone
* multi-line
* comment
*/
alert('Hello, ' + name);
}
hello('New user');
进入这个:
function hello(name) {
alert("Hello, " + name)
}
hello("New user");
答案 2 :(得分:2)
在这里找到一个非常好的解决方案:http://blog.ostermiller.org/find-comment
<强>摘录:强>
现在我们只需要修改注释结尾以允许任意数量的*:
/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/
我们现在有一个正则表达式,可以粘贴到支持正则表达式的文本编辑器中。查找我们的评论是按下查找按钮的问题。您可以在某种程度上为特定编辑器简化此表达式。例如,在一些正则表达式实现中,[^]假设[\ r \ n]并且所有[\ r \ n]都可以从表达式中删除。
这很容易扩充,所以它也会找到//样式评论:
(/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/)|(//.*)
请务必阅读警告,因为这会删除评论中的评论,或者可以不正确地取消注释评论代码。然而,完美地为我工作: - )
答案 3 :(得分:2)
答案 4 :(得分:0)
随时可以应用上述答案中的任何提示..
var text = ".................."; //assuming staring point
........
text = text
.replace(/\r/g,"##R##")
.replace(/\n/g,"##N##")
.replace(/\/\*(.*)\*\//g,"")
.replace(/##R##/g,"\r")
.replace(/##N##/g,"\n")
应用\r
和\n
的一点(独立)替换将简化您的正则表达很多!,
最初甚至使用
g
和m
修饰符(全局和&#34;贪婪&#34;标记),您仍然无法成功删除评论(除非您自定义构建&#34; character-walker&#34;循环,或者多次运行相同的reg-ex ...)这是由于ECMAScript 4({{3}以来的正常表达式匹配的一些特征})
<子> 这里有什么聪明的事情值得一提?
通过这种方式,我们在离散数学(语言和语法)中应用了一个漂亮的小技巧作为&#34;在我们的语法之外的替代品#34;我用非常规方式来保护&#34;保护&#34 ;文本中的\r
和\n
区域没有实际应用太多计算能力来处理它们(如剪切/组合等)。
这是一种赌博,因为基本上##R##
和##N##
(虽然不常见)可能是现有的短语,但这不是问题,因为替换可以无限小 - 更复杂。
简而言之,
正则表达式会更简单,
常规替换将按预期工作,没有空白错误..
\n
和\r
将原封不动地恢复原状。
答案 5 :(得分:0)
天真的单线剥线钳:
var noComments = text.replace(/\/\*(.|[\r\n])*?\*\//g, '').replace(/\/\/.*/gm, '');
声明:
&#34;幼稚&#34;的意思是:
它遍布各处,如果你有:
var a = "/*";
someImportantLogicHere();
var b = "*/";
然后你会得到
var a = "";
您应用这些正则表达式的顺序很重要,您将获得以不同顺序应用它的不同结果
但对于95%的其他案例,这是简单而实用的
答案 6 :(得分:0)
您可以使用babel "comments": false
来实现此目的。我为the-super-tiny-compiler
编写了一个演示版,请查看https://github.com/gengjiawen/the-super-tiny-compiler。