【发布时间】:2011-09-15 05:01:27
【问题描述】:
我的输入有缺陷,看起来像这样...
foo<p>bar</p>
我想对其进行规范化以将前导文本包装在 p 标签中:
<p>foo</p><p>bar</p>
用<p>$1</p> 的正则表达式替换/^([^<]+)/ 很容易。问题是,有时前导块包含 p 以外的标签,如下所示:
foo <b>bold</b><p>bar</p>
这应该将整个块包装在一个新的 p 中:
<p>foo <b>bold</b></p><p>bar</p>
但由于简单的正则表达式只查找<,它在<b> 处停止并吐出:
<p>foo </p><b>bold</b><p>bar</p> <!-- oops -->
那么我该如何重写正则表达式以匹配<p?显然答案涉及到否定前瞻,但this 对我来说有点太深了。
(在不可避免的“你不能用正则表达式解析HTML!”评论之前,输入不是随机的HTML,而是只用标签<p>、<a>、<b>和@987654335注释的纯文本@, 和 a/b/i 不能嵌套。)
【问题讨论】:
-
+1 只为最后一句话。
标签: javascript regex html-parsing regex-negation