使用jquery或javascript查找并替换所有匹配的动态字符串

使用jquery或javascript查找并替换所有匹配的动态字符串,jquery,replace,foreach,pattern-matching,replaceall,Jquery,Replace,Foreach,Pattern Matching,Replaceall,以下是我的html的正文: <body> <div>_good morning John... _welcomeText.</div> <label> _welcomeText </label> <a href="">_good</a> </body> 此代码有效,但它仅替换匹配模式的第一个实例。由于我正在替换来自foreach循环的动态值key,因此我无法使用/key/g替

以下是我的html的正文:

<body>
    <div>_good morning John... _welcomeText.</div>
    <label> _welcomeText </label>
    <a href="">_good</a>
</body>

此代码有效,但它仅替换匹配模式的第一个实例。由于我正在替换来自
foreach
循环的动态值
key
,因此我无法使用
/key/g
替换所有实例。请帮助。

我不推荐这样的基于文本的操作

重要的是,这将是非常昂贵的

var custom_obj = {};
custom_obj["_welcomeText"] = "Welcome in custom";
custom_obj["_good"] = "Good in custom";

var $contents = $('body *').addBack().contents();
$.each(custom_obj, function (key, value) {
    var regex = new RegExp(key, 'g');
    $contents.each(function () {
        if (this.nodeType == 3) {
            this.nodeValue = this.nodeValue.replace(regex, value);
        }
    })
});

演示:

您应该使用此语法创建正则表达式

var myRegex = new RegExp(key, 'g');

我有一个问题。如果存在类似于:
伪文本
的内容,则代码无法工作。有什么办法可以解决吗?如果你有一组预定义的属性需要测试,你可以告诉我怎么做。我找到了解决办法<代码>$('..+键).removeClass(键).addClass(值)
var myRegex = new RegExp(key, 'g');