我正在尝试创建一个错误的单词过滤器,它会抛出包含所提供列表中任何单词的推文,不区分大小写。唯一的问题是我想对坏词列表进行简单编码,以便不会将坏词下载到客户端浏览器。我认为我能做到的唯一方法就是通过评估正则表达式。唯一的问题是,eval似乎不适用于\ b包含在内。如何让正则表达式r3和r4在下面工作?
// 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 );
答案 0 :(得分:1)
在 RegExp()构造函数中使用双重转义:
var r4 = new RegExp('\\b('+restr+')\\b','i');
每当从字符串创建正则表达式时,都需要转义转义字符。另外,不要使用 eval()来创建正则表达式: - )