我正在尝试在 Node.js 应用程序中编写一个正则表达式来获取最后一个 </body>
页面上的标签。我遇到的问题是,某些 HTML 页面内有 iframe,会添加额外的 </body>
。我尝试了很多不同的方法,但无法解决这个问题。
最佳答案
您应该使用 HTML 解析器,例如https://github.com/cheeriojs/cheerio
一般来说,HTML 语法不是常规,因此不可能使用常规表达式进行正确匹配。
但是,由于只能有一个 <body>
在文档中,实际上可以使用正则表达式找到其结束标记,而无需调用 Zalgo ,因为您不需要创建完整的解析树,您只需要对流进行标记。但在 HTML5 中,仍然存在一些疯狂的分词器状态和重新解析规则(例如从未关闭的 <script>
恢复),我不太确定它们是否可以用正则表达式来表达。
但是如果您只使用 HTML 解析器,它将为您省去处理有趣情况的麻烦,例如:
<!-- </body -->
<iframe srcdoc="yup, that's valid</body>"></iframe>
<script>alert("</body> yet?");/*
</body> not this one
*/</script>
</BoDy
>
<-- ^^ it was the one above, or was it? </body>
哦,有效的 HTML 文档不需要有明确的 </body>
根本! </html>
自动暗示它或文档末尾。
关于javascript - 正则表达式获取 HTML 中最后一个 </body> 标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24481639/