如何修复去除HTML标签后出现多空格的正则表达式?
嘿,这问题我熟!你的正则之所以会产生多个空格,是因为每匹配到一个HTML标签或者 就替换成一个空格——要是这些元素连续出现(比如两个标签挨在一起,或者标签跟 相邻),自然就会生成一堆空格堆在一块儿了。
给你两种简单的修复方案:
方案一:分两步处理(最直观好维护)
先把所有标签和 换成空格,再把连续的多个空格合并成单个:
const originalText = "<p>Hello <b>World</b></p>"; const cleanedText = originalText // 替换所有HTML标签和 为单个空格 .replace(/( |<[^>]+>)/gi, ' ') // 把一个或多个连续空格替换成单个空格 .replace(/\s+/g, ' '); // 结果:"Hello World"
如果还想去掉文本首尾的空格,再加个.trim()就行:
const cleanedText = originalText .replace(/( |<[^>]+>)/gi, ' ') .replace(/\s+/g, ' ') .trim();
方案二:一步正则(稍复杂但少一次调用)
用正则匹配连续的标签/ 组合,直接替换成单个空格,不过可读性不如两步法:
const cleanedText = originalText.replace(/( |<[^>]+>)+/gi, ' ').trim();
另外提个小细节:你原正则里的&nbsp;是转义后的 ,如果你的源文本里是原始的 ,直接写 就够了;如果确实存在转义后的&nbsp;,那可以把正则改成(/(&nbsp;| |<[^>]+>)/gi, ' ')来覆盖两种情况。
内容的提问来源于stack exchange,提问作者kenzolek
相关产品推荐
相关产品推荐

