2012-03-29 1 views
1

나는 답을 내기가 나에게 쳐다보고 있기 때문에 바보 같은 질문을하지만 여기에 간다.테스트가 수행 할 때 정규식 객체로 작업을 대체하지 않는 이유는 무엇입니까?

CSS 스타일 textDecoration에서 문자열을 가져 와서 문자열의 밑줄 부분 (및 주위의 공백)을 제거하려고합니다. 그것은 test()를 실행할 때 true를 반환하지만 replace 메서드를 수행하면 문자열이 변경되지 않습니다. 도움?

내 코드 :

출력
textDecoration = function(str) { 
      var n_str = str + '|/\s' + str + '|/\s' + str + '/\s|' + str + '/\s'; 
      var nre = new RegExp(n_str, "g"); 
      debug_log('Found or not: ' + nre.test(txt)); 
      txt.replace(nre, ''); 
      debug_log('Result: ' + txt); 
      debug_log('-----------------------'); 
    } 

    var txt = "underline"; 
    debug_log('-----------------------'); 
    debug_log('Starting String: ' + txt); 
    textDecoration("underline"); 
    txt = "underline overline line-through"; 
    debug_log('-----------------------'); 
    debug_log('Starting String: ' + txt); 
    textDecoration("underline"); 
    txt = "overline underline line-through"; 
    debug_log('-----------------------'); 
    debug_log('Starting String: ' + txt); 
    textDecoration("underline"); 
    txt = "overline line-through underline"; 
    debug_log('-----------------------'); 
    debug_log('Starting String: ' + txt); 
    textDecoration("underline"); 

:

The output

답변

4

replace()은을 대체와 새 문자열을 반환하고 실제 문자열을 변경하지 마십시오. 다음과 같이해야합니다.

var newString = txt.replace(nre, ''); 
debug_log('Result: ' + newString); 
+0

나는 당혹 스럽다. 고마워. 나는 T-Minus에서 8 분을 받아 들일 것이다. –

1

test은 부울을 반환합니다. replace은 새 문자열을 반환합니다. 문자열을 변경하지 않습니다.

또한 정규식은 매우 이상합니다. str = "underline" 적용, 당신은 얻을 것이다 :

/underline|\/sunderline|\/sunderline\/s|underline\/s/ 

공백과 일치하지만, "/s"하지 않는.

+0

정규식을 처음 사용했습니다. 나는 그것이 "밑줄", "밑줄", "밑줄"및 "밑줄"과 일치한다고 가정하고있었습니다. 내가 잘못? –

+0

문자열에서 RegExp 생성자를 지정하면 s가 이스케이프 처리되고 (s로) s가 슬래시가되기 전에 나타납니다. 문자열의 s 앞에있는 백 슬래시를 이스케이프 처리하여 정규 표현식의 공백 메타 문자로 사용해야합니다. 또한, "밑줄"의 양쪽에있는 공백을 삭제해서는 안됩니다 :-) – Bergi

+0

아, 두 공백을 모두 삭제하지 않는 것이 좋습니다! 그것이 중간이라면 나는 문제가 생길 것이다. 더 많은 검색을하고이를 제대로 벗어날 수있는 방법을 찾아 낼 것입니다. 도움을 많이 주셔서 감사합니다! –

관련 문제