批量删除javascript文件中的注释

批量删除javascript文件中的注释,javascript,parsing,comments,Javascript,Parsing,Comments,我在一个很大的基础上做了一些分析,主要是javascript(实际上主要是Siebel eScript,但从语法上来说,这或多或少是一样的) 多年来,糟糕的程序员一直在编写和注释大量代码,通常是函数的全部内容,并将其留在那里。我想在整个代码库中寻找这样的示例,这样我就可以指导开发人员返回并清理一些混乱。我有超过10000个文件,所以我想要一个bash脚本来帮我完成这个任务 我最终想要的是通过linux fs中的文本文件,输出每个文件的代码和注释的字符数 我所尝试的: sed-这里的几个问题导致正

我在一个很大的基础上做了一些分析,主要是javascript(实际上主要是Siebel eScript,但从语法上来说,这或多或少是一样的)

多年来,糟糕的程序员一直在编写和注释大量代码,通常是函数的全部内容,并将其留在那里。我想在整个代码库中寻找这样的示例,这样我就可以指导开发人员返回并清理一些混乱。我有超过10000个文件,所以我想要一个bash脚本来帮我完成这个任务

我最终想要的是通过linux fs中的文本文件,输出每个文件的代码和注释的字符数

我所尝试的:

sed-这里的几个问题导致正则表达式查找//行和/**/对并删除相关注释。我尝试了一些代码片段,但它们似乎在我的代码中失败(没有返回),或者去掉了非注释——因此我认为正则表达式不是一种好方法

yui压缩机-我试过这个,但我找不到如何使它只是剥离评论。缩小意味着我的
wc-c
结果过于扭曲


现在这个问题的理想答案是告诉我使用什么命令行解析器来处理javascript文件以删除注释。剩下的我自己可以做,但我觉得这是我目前找不到的部分。

鉴于您对操作系统不清楚,很难猜测您有什么命令行解析器。(wc在Linux和cygwin下以及windows下都可用)

我不认为这是一个“命令行”起作用,你需要一个了解Javascript的工具,考虑到你的问题是保留有效的Javascript词素,并且只丢弃注释,似乎可以使用regexp。这可能很难编写,因为它必须是语言中每个词素的所有正则表达式的析取。人们使用lexer生成器来计算析取;你可能不能用手做这件事。(是的,我已经编写了生产JavaScript lexers)

获得这种效果的最简单方法是使用完整的Javascript词法分析器

我们的Javascript格式化程序包含这样一个lexer/解析器;它的工作是重新格式化您的代码。它的命令行选项之一是删除注释。您可以将其配置为使用项目文件在一个步骤中处理大量文件


根据Seibel关于escript符合ECMAScript 4的断言,这可能对您有用。

最终,我的解决方案是:

for d in *Script*; do for f in ${d}/*; do echo `/usr/bin/python -m jsmin ${f} | wc -c` `wc -c ${f}`; done; done > function-size.txt
一些示例输出(发现大多数代码都被注释的示例):


谢谢你,艾拉。目前,我一直在开发Debian虚拟机(不确定确切的版本),但我可以访问windows和macos,因此从这个角度来看,我是相当不可知论的。我将下载formatter的评估副本,看看它对我有什么帮助。谢谢我决定使用python jsmin,但Ira让我找到了答案,并帮助我缩小了我的谷歌搜索范围。如果你可以使用Node.js,那么在你的文件中实现一个循环,并使用类似于从每个文件中删除注释的东西。
36 2388 Business+Component+Server+Script/FS+Invoice+Adjustment.Old_BusComp_NewRecord
90 1981 Business+Component+Server+Script/FS+Invoice+Adjustment.Old_BusComp_PreGetFieldValue
43 2012 Business+Component+Server+Script/FS+Invoice+Adjustment.old_BusComp_PreSetFieldValue