You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何移除字符串中除<s></s>外的所有HTML标签?

解决方案

要保留字符串中的<s>和</s>标签(包括带属性的<s ...>),同时移除所有其他HTML标签,你可以使用带有负向单词边界预查的正则表达式,精准区分<s>标签和其他以s开头的标签(比如<strong>、<span>)。

正确正则与代码示例

const cleanedContent = contents.replace(/<(?!\/?s\b)[^>]+>/gi, '');

正则说明

  • <:匹配HTML标签的起始字符
  • (?!\/?s\b):负向预查,确保当前位置后不是/s(闭合标签)或s(起始标签)且紧跟单词边界——这意味着只有标签名严格为s的标签会被排除(不匹配),像<strong>这种标签名以s开头但后续还有其他字符的标签会被正常匹配并移除
  • [^>]+:匹配标签内的所有内容直到>结束
  • /gi:全局匹配(处理所有标签)+ 不区分大小写(兼容<S>、</S>这类写法)

效果验证

假设原始内容为:

<div>Hello <s>world</s>, <strong>this is a test</strong> <s class='strike'>another strike</s></div>

处理后输出:

Hello <s>world</s>, this is a test <s class='strike'>another strike</s>

为什么你之前的正则不行

  • <\/?(?!s)\w*\b[^>]*>:这个正则只排除标签名不以s开头的标签,导致<strong>、<span>这类以s开头的标签被保留,不符合需求
  • <(?!s|/s).*?>:这个正则仅检查标签起始是否为s或/s,但不会判断标签名是否仅为s,因此<strong>这类以s开头的标签同样会被排除(不匹配),无法被移除

内容的提问来源于stack exchange,提问作者BFlow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 17:45:49