什么正则表达式模式将从包含<HTML>的外部HTML文本中提取内部HTML

What regex pattern will extract the innerHTML from the containg <HTML>'s outerHTML text?

本文关键字:HTML 外部 文本 内部 提取 正则表达式 包含 模式 什么      更新时间:2023-09-26

我在字符串中具有html标签的outerHTML,并希望提取内部HTML的body标签。该函数在 C# 中使用,所以我无法访问任何 HTML/JavaScript Dom 功能,类似于如何使用正则表达式 Asp.net C# 获取 BODY html 标记(从字符串)中的所有内容。

HTML

敏捷性路由将不起作用,因为执行 LoadHtml 转换时 HTML 文档中存在差异。我在实时站点上更新时捕获原始HTML正文和HTML正文的差异。我希望将这些差异与原始正文innerHTML进行比较。我想从 HTML outerHTML 中提取身体内部 HTML 的原因是在数据传输时留出空间,(html、头部和身体的一次传输,而不是每个传输。

理想情况下,这将处理任何边缘情况,例如 body 标签中的属性、无效的 html 是 body 标签等。

HTML

敏捷性路由将不起作用,因为执行 LoadHtml 转换时 HTML 文档中存在差异

因此,使用相同的过程加载原始版本和新版本,然后进行比较。

您将丢失非信息集详细信息,例如标记大小写、引用和属性顺序。但是无论如何你已经失去了它,因为当你读取属性时,浏览器会从 DOM 信息集中重新生成innerHTML(或outerHTML);它显然不是您输入的原始 HTML。

var matches = outerHTML.match(
  /<body(?:'s+[a-z]+(?:'s*='s*(?:"[^"]*"|'[^']*'|[^'s>]+)))*'s*>(['S's]*)<'/body>/i);

matches[1]将包含 body 元素的内容(这是 HTML5 WD 中解析规则的实现)。

但是 body 元素是一个特例,因为 HTML 文档中只能有一个元素,所以正则表达式贪婪并不重要。 通常,最好改用标记分析器。