2012-12-16 16 views
1

數組replaceThis是用戶生成的,所以我不能寫出不變的正規表達式規則。
但是我如何創建正則表達式規則?
任何想法都是一個很好的解決方案?Javascript/jquery - Regex中的變量

var replaceThis = new Array(); 
replaceThis[0] = ':)'; 
replaceThis[1] = 'XD'; 
replaceThis[2] = '-.-'; 
replaceThis[3] = 'hello world'; 
replaceThis[3] = ' a ';   
replaceThis[3] = ' B ';     

var message = 'text text :) text text -.- and hello world XD and text a btext B text text'; 
$.each(replaceThis, function(i) 
{ 
    var regex = new RegExp (" ??? ","gi"); 
    message = message.replace(regex,'<span class="blue">'+????+'</span>'); 
}); 

$('body').append(message+'<hr/>'); 

遊樂場:http://jsfiddle.net/s7b3r/2/

提前感謝!
傑米

+0

你有什麼需要嗎?將這些字符串包裝在''中? – MaxArt

+0

所以你需要逃避你的正則表達式,使新的RegExp(「(:))」,「gi」)不會中斷? –

+0

@Salman正確;) – user1815934

回答

4

Check the working DEMO

你需要逃避正則表達式的特殊字符。

String.prototype.escapeRegExp = function() { 
    return this.replace(/([.*+?^=!:${}()|[\]\/\\])/g, "\\$1"); 
} 

然後使用它像:

$.each(replaceThis, function(i, data){ 
    var regex = new RegExp(data.escapeRegExp(),"gi"); 
    message = message.replace(regex, '<span class="blue">$&</span>'); 
}); 
+0

非常感謝!看起來不錯 :) – user1815934