2013-07-26 100 views
2

替换句子的话,我有这个字符串:带格式的HTML

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>. 

我一定要使用正则表达式,或JavaScript的替换()函数将做什么?

+1

你或许应该拆分句子翻译成令牌,然后再评估每个令牌,然后建立起自己的注解HTML字符串。这样你就不会轻易受到子串问题的困扰。 –

回答

7

使用正则表达式和替换:

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

小提琴:http://jsfiddle.net/uezjK/4/

+1

这会将包含errors数组的单词标记为子字符串。例如,在“仍然”中,“stil”将被标记,这可能不是OP想要的。 –

+0

[@Chris is correct](http://jsfiddle.net/davidThomas/uezjK/2/);但是,在光明的一面:['\ b'可以帮助](http://jsfiddle.net/davidThomas/uezjK/3/)。 –

+0

@ChrisFarmer谢谢指出它,改变了表达! –

0

除了卡尔·安德烈的回答,这里是没有正则表达式的方式(只给你一个不同的准):

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>"); 
} 

这里还有一个小提琴:http://jsfiddle.net/azMVk/

0

这里有一个例子,对于有错误词(例如“仍然”)的子字符串的有效词不会失败​​。

http://jsfiddle.net/uezjK/1/

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)