我正在尝试使用JavaScript编写正则表达式,从输入字符串中删除所有HTML标签,除了<br>
。
我使用/(<([^>]+)>)/ig
来匹配标签,并尝试过一些添加[^(br)]的方法,但现在我有点困惑了。
有人可以帮忙吗?我相信这将成为SO大师之间的速度比赛,所以如果答案解释了表达式的逻辑,我会选择它而不是其他答案。
编辑:
对于所有“不要这样做”的人,让我引用Stack Overflow中的以下内容:
在这种情况下,它是一个包含在许多页面中保持一致的div中的大量文本。我只想摆脱一些情况(最多1%),其中用户已经包含了spans,strongs和其他一些格式标签。它不值得更多的时间来正则表达式处理,因为在我处理的成千上万个页面中几乎不会发生。如果您有更好、更快实现的想法,请随意发布它作为答案;)虽然说让正则表达式解析任意HTML就像请Paris Hilton编写操作系统一样不切实际,但有时解析一个有限的、已知的HTML集合是合适的。
编辑2
如此多的评论,我感觉需要添加一个声明: 使用正则表达式解析HTML是不好的。它无法保持一致,并且有更好的方法。Domparser已经被提到;在Node.js上有Cheerio或jsdom,还有很多库可以正确解析HTML文档(在99%的情况下)。在这种情况下,它更像是一个包含需要删除的一些
<...>
的字符串。
text = text.replace(/<(?!br\s*\/?>)[^<>]*>/ig, '');
这段代码可以很好地完成任务。 - ridgerunner