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

求JavaScript代码:转义非HTML/SSML标签内的<、>、&字符

解决方案:转义非HTML/SSML标签的特殊字符

要实现识别并转义字符串中不属于HTML/SSML标签的<、>、&,可以通过正则表达式的负向预查/后查来区分标签内的符号与独立符号,以下是具体实现代码:

function escapeUnsafeChars(str) {
  // 转义独立的&:排除已有的HTML实体(如&nbsp;、&#123;)
  str = str.replace(/&(?!#?[0-9a-zA-Z]+;)/g, '&amp;');
  
  // 转义不属于标签的<:排除完整的HTML/SSML标签开头(如<div>、<prosody rate="slow">)
  str = str.replace(/<(?!([a-zA-Z][a-zA-Z0-9:-]*)(\s+[a-zA-Z_:][a-zA-Z0-9_:-]*(\s*=\s*(["'].*?["']|[^>\s]+))?)*\s*>)/g, '&lt;');
  
  // 转义不属于标签的>:排除完整的HTML/SSML标签结尾
  str = str.replace(/(?<!<([a-zA-Z][a-zA-Z0-9:-]*)(\s+[a-zA-Z_:][a-zA-Z0-9_:-]*(\s*=\s*(["'].*?["']|[^>\s]+))?)*\s*)>/g, '&gt;');
  
  return str;
}

// 测试用例
const input = 'This is a <b>bold</b> & <i>italic</i> text. While this < is a non closing bracket like this <3.';
const output = escapeUnsafeChars(input);
console.log(output);
// 输出结果:
// 'This is a <b>bold</b> &amp; <i>italic</i> text. While this &lt; is a non closing bracket like this &lt;3.'

代码说明

  • 处理&:通过负向预查(?!#?[0-9a-zA-Z]+;)确保只转义未构成HTML实体的独立&,避免破坏已有的实体符号。
  • 处理<:负向预查排除完整的标签开头结构——匹配<后是否跟随合法标签名、可选属性及闭合>,仅转义不符合该结构的独立<(如<3、< )。
  • 处理>:负向后查排除完整的标签结尾结构,仅转义不属于标签闭合部分的独立>。

该方案能覆盖大部分边缘场景,包括带属性的标签、SSML的特殊标签(如带冒号的<speak:xxx>)、以及与其他字符组合的特殊符号(如<3)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 00:05:11