2010-08-20 55 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