Регулярное выражение, которое Eval'ed с границами слова - PullRequest
2 голосов
/ 20 августа 2010

Я пытаюсь создать фильтр плохих слов, который выбрасывает твиты, содержащие любое из слов в предоставленном списке, без учета регистра. Единственная проблема заключается в том, что я хочу сделать простое кодирование списка плохих слов, чтобы плохие слова не загружались в браузер клиента. Я думаю, что единственный способ сделать это - вывести регулярное выражение. Единственное, 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 );

1 Ответ

1 голос
/ 20 августа 2010

Использовать двойное экранирование внутри конструктора RegExp () :

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

Всякий раз, когда вы создаете регулярное выражение из строки, вам нужно экранировать escape-символ. Также не используйте eval () для создания регулярных выражений: -)

...