Javascript 用格式化的html替换句子中的单词

Javascript 用格式化的html替换句子中的单词,javascript,jquery,Javascript,Jquery,我有这个字符串: var text = "Altough I am the eldest son, they stil see me as kdi."; 这个阵列: var errors = ["Altough", "stil", "kdi"]; 我想替换数组中句子中的单词,因此文本如下所示: <span class="error">Altough</span> I am the eldest son, they <span class="error">s

我有这个字符串:

var text = "Altough I am the eldest son, they stil see me as kdi.";
这个阵列:

var errors = ["Altough", "stil", "kdi"];
我想替换数组中句子中的单词,因此文本如下所示:

<span class="error">Altough</span> I am the eldest son, they <span class="error">stil</span> see me as <span class="error">kdi</span>.
虽然我是长子,他们还是把我当成kdi。

我必须使用regex吗,或者javascript replace()函数可以吗?

使用regexp和replace:

var errors = ["Altough", "stil", "kdi"];
var regExp = new RegExp('\\b('+errors.join('|')+')\\b', 'gi');
var text = text.replace(regExp, '<span class="error">$1</span>');
var errors=[“Altough”、“stil”、“kdi”];
var regExp=new regExp('\\b('+errors.join('|')+')\\b',gi');
var text=text.replace(regExp,$1');

Fiddle:

除了卡尔·安德烈的答案,这里有一种不用正则表达式的方法(只是给你一个不同的前景):

var text=“虽然我是长子,但他们仍然认为我是kdi。”;
var错误=[“Altough”、“stil”、“kdi”];
对于(变量i=0;i

这里还有一个例子:

这里有一个例子,对于包含错误字的子字符串的有效字(例如“still”),它不会失败

var text=“虽然我是长子,但他们仍然认为我是kdi。但我还是个孩子。”;
var tokens=text.split(/\s+/);
var错误=[“Altough”、“stil”、“kdi”];
var html=“”;
对于(变量i=0;i=0){
html+=“”+标记[i]+“”;
}否则{
html+=标记[i]+'';
} }
$('body').append(html)

这将包含错误数组的单词标记为子字符串。例如,在“静止”中,“静止”将被标记,这可能不是OP想要的。;但是,好的一面是:。@ChrisFarmer谢谢你指出了这一点,改变了表情!您可能应该首先将句子拆分为标记,然后计算每个标记,然后构建带注释的html字符串。这样,您就不会那么容易地遇到子字符串问题。
var text = "Altough I am the eldest son, they stil see me as kdi.";
var errors = ["Altough", "stil", "kdi"];

for (var i = 0; i < errors.length; i++) {
    var content = errors[i];
    text = text.replace(content, "<span class='error'>" + content + "</span>");
}
var text = "Altough I am the eldest son, they stil see me as kdi. But I am still a kid."; 
var tokens = text.split(/\s+/);

var errors = ["Altough", "stil", "kdi"]; 
var html = "";

for (var i=0; i<tokens.length; i++) {
    var word = tokens[i].replace(/\W+/, '');
    if ($.inArray(word, errors) >= 0) {
        html += "<span class='error'>" + tokens[i] + "</span> "; 
    } else {
        html += tokens[i] + " ";
    } }

$('body').append(html)