繁体   English   中英

在HTML中查找注释

[英]Finding comments in HTML

我有一个HTML文件,其中可能包含Javascript,PHP,而人们可能会或可能不会将所有这些东西放入HTML文件中。

我想从此html文件中提取所有注释。

我可以指出这样做的两个问题:

  1. 用一种语言发表的评论可能不是用另一种语言发表的评论。

  2. 在Javascript中,其余行使用//标记注释掉。 但是,URL中也包含// ,因此,如果我只应用// ,然后替换行中的其余内容,则不添加任何内容,因此我很可能会消除URL的某些部分。

因此,这不是一个小问题。

已经有解决方案吗?

有人做过吗?

问题2:当您用任何一种语言编写网址时,不是每个网址都用“ www.url.com”或“ www.url.com”引用吗? 我不确定。 如果是这种情况,那么您要做的就是解析代码,并检查反斜杠之前是否有任何引号,以了解它是真实的网址还是仅仅是注释。

查看诸如ANTLR之类的解析器生成器,该生成器具有多种语言的语法,并编写一个嵌套解析器以可靠地查找注释。 如果准确性很重要,则正则表达式将无济于事。 即使那样,它也不是100%准确的。

考虑

问题3,用一种语言发表的评论并不总是一种用语言发表的评论。

<textarea><!-- not a comment --></textarea>
<script>var re = /[/*]not a comment[*/]/, str = "//not a comment";</script>

问题4,语言中嵌入的注释可能显然不是注释。

<button onclick="&#47;&#47; this is a comment//&#10;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代码部分中的注释。

从您的话看来,您正在考虑基于正则表达式的某种方法:在整个文件上这样做是很痛苦的,尝试使用一些工具来突出显示或丢弃有趣或无趣的文本,然后处理剩下的内容。根据保留/丢弃标准筛选筛子。 看一下HTML :: Tree和TreeBuilder,处理HTML标记可能非常有用。

我会将HTML文件转换为字符数组并进行解析。 前进时,您可以检测到诸如“ <”,“-”,“ www”,“ http”之类的键字符串,可以跳过或删除这些段。

必须正确识别开始/结束索引,这是一个挑战,但是您将拥有全部功能。

如果性能不成问题,还有其他方法可以简化过程。 例如,可以使用XML :: Twig捕获所有标签,并且可以解析该字符串以检测JS注释。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM