javascript - 正则表达式获取 HTML 中最后一个 </body> 标签

标签 javascript regex node.js

我正在尝试在 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/

相关文章:

javascript - 在ajax jquery中显示json响应,

javascript - dom 加载后,如何使 jquery 元素对生成的元素起作用?

javascript - 使用 jquery 单击输入类型按钮时如何更改 Canvas 背景图像?

python - 排除匹配 [\W\d]+ 正则表达式中的句点字符

node.js - 停止防止应用程序终止的 Mongoose 连接

node.js - 无法使用 'winston' 和 's3-streamlogger' 在 aws S3 存储桶中创建日志

javascript - 通过 Titanium SDK 中的模块传递事件

javascript - JS中如何格式化字符串?

regex - [Regex]::Replace() 和 -replace 之间有什么区别?

node.js - 错误 : Please install tedious package manually