2010-08-20 3 views
2

제공된 목록의 단어를 포함하는 트윗을 대문자와 소문자로 구분하는 잘못된 단어 필터를 만들려고합니다. 유일한 문제는 잘못된 단어 목록을 클라이언트 브라우저로 다운로드하지 않도록 간단한 단어 인코딩을하고 싶다는 것입니다. 내가 할 수있는 유일한 방법은 정규 표현식을 평가하는 것이다. 단, 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

사용 정규식() 생성자 내부를 두 번 탈출 :

당신은 문자열에서 정규 표현식을 만들 때마다
var r4 = new RegExp('\\b('+restr+')\\b','i'); 

, 당신은 이스케이프 문자를 이스케이프해야합니다. 또한 정규 표현식을 만들려면 eval()을 사용하지 마십시오.

+1

Ahhhh !!! 예!! 일했다! 상대적으로 JS와 새로운 그래서 지금은 얼마나 정확하게 나쁜 eval인지 깨닫기 시작했습니다! 감사! – dishwasher

+0

사용할 때 [매우주의해야합니다] (http://stackoverflow.com/questions/4213800/is-there-something-like-counter-variable-in-regular-expression-replace/4214173#4214173) '\ b' 스타일은 정규 표현식에서 단어 경계를 나타냅니다. – tchrist

+0

@tchrist : OP에 대한 의견을 보내 주어야한다고 생각합니다. 나는 단지 질문에 답하고있었습니다 :-) –