免责声明: 在 you-can't-parse-html-with-regex 盲目咒语开始之前 - 请给我怀疑的好处并将这个问题读到最后(+假设我已经知道那个 RegEx-ing HTML 将让你发疯并解析 Html The Cthulhu Way )
大多数对正则表达式匹配 HTML 的抱怨来自这样一个事实,即 HTML 格式松散,正则表达式难以匹配不同的问题和用户错误 + 递归等其他一些事情。
但是 - 如果 HTML 实际上是有效的 XHTML(或更类似于 XML),它源自受控环境(不是一般的用户生成的 HTML 文档,而是例如您将在客户端模板引擎中使用的 HTML 片段模板)怎么办? ) 并且已经手动检查错误并多次验证?
让我解释一下我为什么感兴趣。我正在对 Javascript 中的不同 String2DOM 技术进行速度基准测试,并且测试了从 innerHTML、outerHTML、insertAdjacentHTML、createRange、DOMParser、doc.write(通过 iFrame)甚至是 John Riesigs HTMLtoDOM JS 库的所有内容。
我很好奇是否有更快的方法。
createElement/appendChild(+setAttribute 和 createTextNode)是在 Javascript 中创建 DOM 元素的最快方法。正则表达式是遍历大字符串的最快方法。难道这两种方法不能仍然结合起来,以可能创建一种更快的方法来将 DOMString 片段解析为 DOM 吗?
一个示例 HTML 字符串:
<div class="root fragment news">
<div class="whitebg" data-name='Freddie Mercury'>
<div id='myID' class="column c2">
<h1>This is my title</h1>
<p>Vivamus urna <em>sed urna ultricies</em> ac<br/>tempor d </p>
<p>Mauris vel neque sit amet Quisque eget odio</p>
</div>
<div class="nfo hide">Lorem <a href='http://google.com/'>ipsum</a></div>
</div>
</div>
因此,理想情况下,代码将返回一个带有正则表达式的 documentFragment,解析 XHTML 汤并使用 createElement/appendChild (+setAttribute/createTextNode) 来填充元素。(一个类似但还不完全的例子是HTML2DOM)
我(和世界其他地方)非常非常感兴趣,如果这样的东西可以在 JS 中从 DOMString 生成 DOM 中击败好的旧的 innerHTML。可以吗?
谁愿意尝试他们的知识来制作这样的东西?并在 Stackoverflow 的编年史中占据一席之地?:)
EDIT2:谁曾经盲目地对此投票 - 至少解释一下你觉得这个问题有什么问题?我对这个主题非常熟悉,提供了它背后的逻辑,并解释了这个场景的不同之处+甚至发布了一些提供类似解决方案的链接。那你呢?