【发布时间】:2014-09-16 19:36:17
【问题描述】:
我正在尝试在 javascript 中创建一个正则表达式,以从输入字符串中删除所有 html 标签,<br> 除外。
我使用/(<([^>]+)>)/ig 作为标签,并尝试了一些方法,例如添加 [^(br)],但我现在只是感到困惑。
有人可以帮忙吗?我确信这将是 SO 大师之间的速度竞赛,所以如果答案解释了表达式的逻辑,我会选择它而不是其他人。
编辑:
对于所有“不要这样做”的人,让我引用Stack Overflow的以下内容
虽然要求正则表达式解析任意 HTML 确实就像要求 Paris Hilton 编写操作系统一样,但有时解析有限的已知 HTML 集是合适的。
在这种特殊情况下,它是 div 中的一堆文本,在许多页面中保持一致。我只想摆脱一些用户包含跨度、强项和其他一些格式标记的情况(最多 1%)。正则表达式的时间并不值得,因为它几乎不会发生在我处理的数千个页面中。如果您有更好、更快实施的想法,请随时将其发布为答案;)
编辑 2
这么多cmets,我想加个免责声明:
使用 Regexp 解析 HTML 不好。它不会始终如一地工作,并且有更好的方法。已经提到了 Domparser; Node.js 上有 Cheerio 或 jsdom,还有更多可以正确解析 HTML 文档的库(在 99% 的情况下)。在这种情况下,它更像是一个恰好包含一些我需要删除的<...> 的字符串。
【问题讨论】:
-
提示:使用正则表达式解析 HTML 内容绝不是一个好主意。
-
强制不要这样做链接:stackoverflow.com/q/1732348/1615483
-
我会说,即使尝试使用有效的 html 解析器也会更好。然而这个
<([^>]+)>并不是这样的尝试。至少您必须解析 cmets 以及通用标签结构。如果你需要,我可以放下一个巨大的正则表达式。 -
text = text.replace(/<(?!br\s*/?>)[^<>]*>/ig, '');会做得很好。
标签: javascript html regex