2010-08-20 49 views
2

我試圖創建一個壞詞過濾器拋出包含在提供的列表中,不區分大小寫任何的話鳴叫正則表達式。唯一的問題是我想對壞詞列表進行簡單的編碼,以便不好的單詞不會下載到客戶端瀏覽器。我認爲我能做到的唯一方法就是評估正則表達式。唯一的事情是,eval似乎不適用於包含\ b的。我如何獲得正則表達式r3和r4以下的工作?是Eval'ed與字邊界

// encoded bad word list decoded to below 
var badwordlist = 'Sam,Jimmy,Johnny'; 
var restr = badwordlist.split(',').join('|'); 

// this works 
var r2 = /\b(Sam|Jimmy|Johnny)\b/i; 
var ndx2 = "safads jimmy is cool".search(r2); 

// these don't 
var r3 = eval('/\b('+restr+')\b/i'); 
var ndx3 = "safads jimmy is cool".search(r3); 

var r4 = new RegExp('\b('+restr+')\b','i'); 
var ndx4 = "safads jimmy is cool".search(r4); 

alert(restr); 
alert('ndx2:'+ndx2 +',ndx3:'+ndx3 + 'ndx4:'+ ndx4); 

回答

1

使用雙逃脫的RegExp()構造函數中:

var r4 = new RegExp('\\b('+restr+')\\b','i'); 

每當你從一個字符串創建一個正則表達式,你需要躲避轉義字符。另外,不要使用的eval()到:-)

+1

AHHHH創建正則表達式!是!!成功了!與JS相對較新,所以我現在纔開始意識到eval究竟有多糟糕!謝謝! – dishwasher 2010-08-20 16:12:06

+0

一個需要是[極其小心]當使用(http://stackoverflow.com/questions/4213800/is-there-something-like-a-counter-variable-in-regular-expression-replace/4214173#4214173)在正則表達式中'\ b'樣式的單詞邊界。 – tchrist 2010-11-18 16:20:14

+0

@tchrist:我覺得你的評論應該直指OP,我只是回答了這個問題:-) – 2010-11-18 16:32:59