2010-08-20 9 views
2

J'essaye de créer un mauvais filtre de mot qui jette dehors des tweets qui contiennent l'un des mots dans une liste fournie, insensible à la casse. Le seul problème est que je veux faire un simple encodage de la liste des mots interdits afin que les mots ne soient pas téléchargés dans le navigateur client. Je pense que la seule façon de le faire est d'évaluer une expression régulière. La seule chose est, eval ne semble pas fonctionner avec les \ b inclus. Comment puis-je obtenir les expressions rationnelles r3 et r4 ci-dessous?Expression régulière qui est évaluée avec des limites de mot

// 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); 

Répondre

1

utilisation double échapper à l'intérieur du RegExp() constructeur:

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

Chaque fois que vous créez une expression régulière d'une chaîne, vous devez échapper au caractère d'échappement. Aussi, n'utilisez pas eval() pour créer des expressions régulières :-)

+1

Ahhhh !!! Oui!! travaillé! relativement nouveau avec JS donc je commence seulement maintenant à réaliser à quel point exactement est eval! Merci! – dishwasher

+0

il faut être [extrêmement prudent] (http://stackoverflow.com/questions/4213800/is-there-quelque-que-comme-une-counter-variable-in-regular-expression-replace/4214173#4214173) lors de l'utilisation Les limites des mots de style '\ b' dans les regex. – tchrist

+0

@tchrist: Je pense que votre commentaire devrait être dirigé vers le PO, je répondais simplement à la question :-) –

Questions connexes