2009-06-02 3 views
0

좋아, 여기 내 현재 테스트 함수의 '?'가 :간단한 정규식 문제 :와 교체 단어의

function make_void(str) 
{ 
    var str_arr = str.split(/[\W]+/); 
    var voidstr; 
    var newstr = ""; 

    for (var i = 0; i < str_arr.length; i++) 
    { 
     voidstr = str_arr[i]; 
     // if (Math.random() <= 0.9) 
     // { 
      voidstr = voidstr.replace(/\w/gi, "?"); 
     // } 

     newstr += voidstr + " "; 
    } 

    document.writeln(newstr); 
} 

문제? 구두쇠가 사라집니다.

수정하지 않는 것이 좋습니다.

답변

3

비 공백 (\s)이 아닌 단어 (\W)로 분할하면 구두점이 유지됩니다.

function make_void(str) 
{ 
     var str_arr = str.split(/\s+/); // !!!THIS LINE CHANGED!!! 
     var voidstr; 
     var newstr = ""; 

     for (var i = 0; i < str_arr.length; i++) 
     { 
       voidstr = str_arr[i]; 
       // if (Math.random() <= 0.9) 
       // { 
         voidstr = voidstr.replace(/\w/gi, "?"); 
       // } 

       newstr += voidstr + " "; 
     } 

     document.writeln(newstr); 
} 


갱신 : 예 Array.join를 사용하여 니펫을() 메소드 :

for (var i = 0; i < str_arr.length; i++) 
{ 
    // if (Math.random() <= 0.9) 
    // { 
     str_arr[i] = str_arr[i].replace(/\w/gi, "?"); 
    // } 
} 

var newstr = str_arr.join(' '); 
+0

좋은 점은, 웃기려는 의도가 없으며 :) –

+0

오! 이런! 나는 이것에 쉬운 대답이 있음을 알았다. : P –

+0

오, 또 다른 생각 - 수동 문자열 concatentation 대신 Array.join ('')을 사용하는 것을 고려하십시오 - 더 빠를 것이라고 생각합니다. –

1

일치하는 대상에 대한 몇 가지 샘플 텍스트가 도움이 될 수 있습니다. (? 실제로 원하는 작업 유지)

지금은, 다음과 같은 정규 표현식은 도움이 될 수 있습니다 :

[\w\d,.?:;"'-()] 

이 결코 모든 사람하지만 단어, 숫자 및 문장 부호 문자의 수를 (일치).