查看像 ANTLR 这样的解析器生成器,它具有多种语言的语法,并编写一个嵌套解析器来可靠地查找注释。如果准确性很重要,正则表达式不会对您有所帮助。即便如此,它也不会是 100% 准确的。
考虑
问题 3,一种语言的评论并不总是一种语言的评论。
<textarea><!-- not a comment --></textarea>
<script>var re = /[/*]not a comment[*/]/, str = "//not a comment";</script>
问题 4,嵌入在语言中的注释可能显然不是注释。
<button onclick="// this is a comment// notAComment()">
问题5,什么是注释可能取决于浏览器是如何配置的。
<noscript><!-- </noscript> Whether this is a comment depends on whether JS is turned on -->
<!--[if IE 8]>This is a comment, except on IE 8<![endif]-->
我必须为上下文模板系统部分解决这个问题,该系统从源代码中删除注释以防止泄漏软件实现细节。
https://github.com/mikesamuel/html-contextual-autoescaper-java/blob/master/src/tests/com/google/autoesc/HTMLEscapingWriterTest.java#L1146显示了一个测试用例,其中在 JavaScript 中标识了注释,稍后测试用例显示在 CSS 和 HTML 中标识的注释。您也许可以调整该代码以查找注释。它不会处理 PHP 代码部分中的注释。