如何使用javascript replace()函数替换多个单词?

时间:2011-10-14 08:29:28

标签: javascript

这是我的代码:

        var keys = keyword.split(' ');
        //alert(keys);
        for(var i=0; i<keys.length; i++)
            {
            var re = new RegExp(keys[i], "gi");
            var NewString = oldvar.replace(re, '<span style="background-color:#FFFF00">'+keys[i]+'</span>');
            document.getElementById("wordlist").innerHTML=NewString;
            alert(keys[i]);
            }

但是如果我把字符串“a b”放在这里;它分为两个字母“a”和“b” 并且这个替换函数替换“a”但是当它得到“b”时它会覆盖并且只替换“b”。 但我想强调“a”和“b”。 怎么解决这个? 我有另一个问题。如果我替换/突出显示它,那么它将替换HTML标记的所有“a”和“b”。那么,如何防止替换那些html标签。但是当我显示整个文本时,我需要所有的html标签

4 个答案:

答案 0 :(得分:2)

    var keys = keyword.split(' ');
    //alert(keys);
    for(var i=0; i<keys.length; i++)
        {
        var re = new RegExp(keys[i], "gi");
        oldvar = oldvar.replace(re, '<span style="background-color:#FFFF00">'+keys[i]+'</span>');
        document.getElementById("wordlist").innerHTML=oldvar;
        alert(keys[i]);
        }

编辑: 很明显oldvar在循环期间没有改变,总是只有最后替换被应用。您必须更改“oldvar”才能替换所有单词

答案 1 :(得分:2)

你实际上可以像这样做一个正则表达式替换:

var re = new RegExp(keys.join("|"), "gi");
oldvar = oldvar.replace(re, replacer);        
document.getElementById("wordlist").innerHTML = oldvar;

function replacer(str)  
{  
    return '<span style="background-color:#FFFF00">' + str + '</span>';
}  

示例 - http://jsfiddle.net/zEXrq/1/

它正在做的是将所有键合并为|分隔的单个正则表达式,它将匹配所有单词,然后在匹配项上运行replacer函数。

示例2 - http://jsfiddle.net/zEXrq/2/

答案 2 :(得分:1)

您应该对同一个var执行操作。你在循环之外使用oldvar,但从不将更改的内容转换为oldvar。所以最后一次迭代(仅)是替换内容的那次。

答案 3 :(得分:0)

您在每次迭代中对变量replace(未在此片段中声明)调用oldvar,因此每次从同一点(非突出显示的字符串)开始。在没有看到所有代码的情况下,我猜想只需将var NewString =替换为oldvar =,将.innerHTML=NewString替换为.innerHTML=oldvar即可解决您的问题。