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

如何仅替换HTML文本值中的",不替换标签属性内的该字符

解决方案:仅替换HTML文本内容中的"为中文引号

原代码通过全局替换/"/g会将标签属性内的"一并替换,不符合需求。以下提供两种可靠的解决方式:

方法一:利用DOM API解析处理(推荐)

通过将HTML字符串转为DOM结构,仅遍历并修改文本节点内容,完全规避属性内容的误修改,适用于所有HTML结构场景。

const app = document.getElementById("app");

const lessonText = `
<span style="font-family: &quot;Courier New&quot;, Courier, monospace;">
  <font color="#af88ff">&quot;,&quot;</font>
  <font color="#ff5a96">Nonstudents</font>
  <span>c(&quot;,&quot;)</span>
</span>
`;

// 创建临时容器解析HTML
const tempContainer = document.createElement('div');
tempContainer.innerHTML = lessonText;

// 递归遍历所有文本节点进行替换
function processTextNodes(node) {
  if (node.nodeType === Node.TEXT_NODE) {
    node.textContent = node.textContent.replace(/&quot;/g, '“');
  } else if (node.nodeType === Node.ELEMENT_NODE) {
    Array.from(node.childNodes).forEach(processTextNodes);
  }
}

processTextNodes(tempContainer);
app.innerHTML = tempContainer.innerHTML;

方法二:正则表达式处理(适合简单场景)

通过正则断言匹配不在属性双引号范围内的&quot;,仅替换文本内容中的目标字符。注意此方法仅适用于属性统一使用双引号包裹的场景。

const app = document.getElementById("app");

const lessonText = `
<span style="font-family: &quot;Courier New&quot;, Courier, monospace;">
  <font color="#af88ff">&quot;,&quot;</font>
  <font color="#ff5a96">Nonstudents</font>
  <span>c(&quot;,&quot;)</span>
</span>
`;

// 匹配不在属性双引号内的&quot;
const replacedText = lessonText.replace(/&quot;(?=(?:[^"]|"[^"]*")*$)/g, '“');

app.innerHTML = replacedText;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 10:06:16