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

使用textContent提取文本时如何排除软连字符­?

解决textContent提取文本里的软连字符问题

问题根源

你以为提取到的是字符串­,其实不是——HTML里的­实体被DOM解析后,会变成Unicode软连字符(U+00AD),这是个看不见的单个字符,不是"­"这六个字符,所以你之前匹配"­"的正则自然没用。

可行方案

方案1:先清掉所有软连字符再替换

直接用Unicode转义序列匹配这个隐形字符,先把文本清理干净:

// 先移除所有软连字符
const cleanedText = originalText.replace(/\u00AD/g, "");
// 再执行你的替换
const finalText = cleanedText.replace(/eftersom/g, "???");

方案2:直接匹配带软连字符的目标单词

如果不想先清理,想直接匹配中间可能插了软连字符的单词(比如efter+软连字符+som),可以把目标单词的每个字符之间加上可选的软连字符匹配规则:

// 把目标单词转换成允许中间插软连字符的正则模板
function getSoftHyphenSafeRegex(word) {
  return new RegExp(word.split("").join("\\u00AD?"), "gi");
}

// 使用示例:替换所有带软连字符的eftersom
const targetWord = "eftersom";
const result = originalText.replace(getSoftHyphenSafeRegex(targetWord), "???");

方案3:修改你原来的正则逻辑

针对你之前写的带前后非单词字符的正则,只需把firstWord处理成允许中间插软连字符的形式就行:

const processedFirstWord = firstWord.split("").join("\\u00AD?");
const regex = new RegExp(`(\\W)(${processedFirstWord})(\\W)`, "gi");
const result = originalText.replace(regex, "$1???$3");

验证小技巧

不确定是不是这个字符?可以打印每个字符的编码确认:

originalText.split("").forEach(char => {
  console.log(char.charCodeAt(0).toString(16)); // 软连字符会输出"ad"
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 16:05:22