使用C#从字符串中删除JavaScript注释

3

我正在尝试使用C#从字符串中删除JavaScript注释(///**/)。有人有相应的正则表达式吗?我正在读取JavaScript文件列表,然后将它们附加到字符串中,尝试清理JavaScript代码并使其轻松加载。下面是一个可以正确处理/* */注释的RegEx,但我也需要删除//注释:

content = System.Text.RegularExpressions.Regex.Replace(content,
    @"/\*[^/]*/", 
    string.Empty);

为什么你的问题全部都是斜体字? - Malfist
5个回答

7

你不能仅使用简单的正则表达式来可靠地删除JS中的注释。例如,试图处理以下内容:

alert('string\' // not-a-comment '); // comment /* not-a-nested-comment
alert('not-a-comment'); // comment */* still-a-comment
alert('not-a-comment'); /* alert('commented-out-code');
// still-a-comment */ alert('not-a-comment');
var re= /\/* not-a-comment */; //* comment
var e4x= <x>// not-a-comment</x>;

您可以通过使正则表达式以“*/”结尾,而不仅仅是“/”,并在其周围添加一个or子句来添加对//到换行符的测试,从而使您的正则表达式比现在更好地工作。但是它永远不会是防弹的,因为正则表达式没有解析像JavaScript或[X]HTML这样的语言的能力。


6

那个链接指向了一个C实现,而不是C#实现,原因不明。 - jamiebarrow

4

除了正则表达式,还有一个替代方案是YUI Compressor for .Net,它可以帮助你去除注释并压缩JavaScript代码。

// Note: string javaScript == some javascript data loaded from some file, etc.
compressedJavaScript= JavaScriptCompressor.Compress(javaScript); 

我可能有点偏见,但我也会推荐这个。只是希望我能解决这个项目中的最后一个小错误 *叹气...并且暗示需要一些专业帮助? :) * - Pure.Krome
我会为YUI Compressor for .NET作证。我已将其集成到我的构建过程中 - 我自动从每个myfile.debug.js生成一个myfile.min.js文件。它非常棒。 - Greg

-1
content = Regex.Replace(content,
                        "/\\*.*?\\*/",
                        String.Empty,
                        RegexOptions.Compiled | RegexOptions.Singleline);

这真的很糟糕。 - tocqueville
为什么这样说很糟糕?如果你要留下这样的评论,那么发帖人和其他人应该知道,以便他们可以做出明智的决定,是否应该使用一种解决方案而不是另一种。 - Rush Frisby
大多数情况下它会失败,破坏JavaScript代码并使其无法使用。 - tocqueville

-1

我推荐使用 stripcmt 程序:

StripCmt 是一个简单的实用程序,用 C 语言编写,可以从 C、C++ 和 Java 源文件中删除注释。它遵循 Unix 文本处理程序的传统,既可以作为 FIFO(先进先出)过滤器运行,也可以在命令行上接受参数。

这个程序简单而且稳定,能够完美地完成工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接