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

如何实现多词查找替换?优化仅支持单文本替换的现有代码

实现多词查找替换的代码修改方案

核心思路是把单组替换规则改成多组替换规则集合,通过正则表达式一次性匹配所有目标词并完成替换,既提升效率,又能灵活添加任意多组替换规则。

修改后的完整代码

var observer = new MutationObserver(onMutation);
observer.observe(document, {
    childList: true, // 监听节点的添加/移除
    subtree: true,   // 监听所有后代元素
});

function onMutation(mutations, observer) {
    for (var i = 0, len = mutations.length; i < len; i++) {
        var added = mutations[i].addedNodes;
        for (var j = 0, node; (node = added[j]); j++) {
            replaceText(node);  
        }
    }
}

function replaceText(el) {
    // 在这里定义所有需要替换的词:键是原文本,值是替换后的文本
    const replacePairs = {
        "winter": "summer",
        "apple": "orange",
        "cat": "dog",
        // 可以继续添加更多替换规则
        "old": "new"
    };

    // 辅助函数:转义正则表达式中的特殊字符,避免匹配出错
    function escapeSpecialChars(str) {
        return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
    }

    // 生成匹配所有目标词的正则表达式,g表示全局替换
    const targetRegex = new RegExp(
        Object.keys(replacePairs).map(escapeSpecialChars).join('|'),
        'g'
    );

    const walker = document.createTreeWalker(el, NodeFilter.SHOW_TEXT);
    for (let node; (node = walker.nextNode());) {
        const originalText = node.nodeValue;
        // 用回调函数根据匹配到的内容自动替换成对应的值
        const updatedText = originalText.replace(targetRegex, match => replacePairs[match]);
        if (originalText !== updatedText) {
            node.nodeValue = updatedText;
        }
    }
}

关键修改说明

  1. 替换规则集合:用replacePairs对象存储所有需要替换的词对,新增替换规则只需要在对象里添加键值对即可。
  2. 正则转义:通过escapeSpecialChars函数处理目标词中的正则特殊字符(比如., *等),避免替换逻辑出错。
  3. 全局匹配替换:生成包含所有目标词的正则表达式,一次遍历文本节点就能完成所有替换,比多次遍历效率更高。
  4. 灵活扩展:如果需要不区分大小写替换,只需要把正则的flags改成'gi'即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 11:40:31