我问另一个question关于如何修复缺少标签的HTML sting,我得到的答案是使用DOMParser或innerHTML。这两个都像魅力一样,但这让我思考,如何在没有浏览器的帮助下实现这一目标?例如,如果我想在Node中操作这个字符串?
我提到的示例字符串如下:
"This <small>is <i>ONE</small> Messed up string</i>."
我想修复它,看起来像:
"This <small>is <i>ONE</i></small><i> Messed up string</i>."
我的想法是使用子串和连接的组合,并附加一个缺少的结束标记,或者添加一个缺少的开始标记,但它似乎是一个业余的移动。
答案 0 :(得分:2)
从头开始执行此操作的最强大的方法(例如,在没有浏览器帮助的情况下)将编写一个解析器,该解析器了解您的“损坏”语法并在解析时输出“正确”语法。您必须决定何时添加缺少的标签。这将适用于几页代码,但想法如下:
首先编写一个可以在“标记”中读取字符串的标记生成器。您可能希望阅读文本片段并将其分类为开始标记,内容或关闭标记。通过在状态机中迭代字符串的每个字符来跟踪上下文,理解转义序列并发出令牌列表,这是最简单的方法。
接下来写另一个读取这些令牌的状态机。
完成所有令牌后,如果堆栈不为空,请在堆栈上预先启动标记,将伪造的结束标记写入结果。