2013-02-23 2 views
0

길이가 단 하나의 요소 인 배열과 루프를 통해 검색/바꾸기를 수행하는 문자열이 있습니다.String.replace() 메서드의 익명 함수 사용

for (i; i < r; i += 1) { 
    str.replace(rex[i], function(star, p1, p2) { 
     console.log(i, star, p1, p2); 
     return p1 + '\\s*(.*)\\s*' + p2; 
    }); 
} 

결과는 i am*\\s*(.*)\\s*happy all the\\s*(.*)\\s*time을해야한다 :

var str = "i am*happy all the*time", 
    rex = [ 
     /(\S)\s*\*\s*(\S)/g 
     ], 
    i = 0, 
    r = rex.length; 

이 나는 ​​순간에 이것을 달성하기 위해 노력하고있어 방법이다. 하지만 지금은 str이 영향을받지 않는 것으로 보입니다. 콘솔을 확인해도 관련성이 높은 일치가 만들어지고 있습니다. 너 자신을 위해 이것을 볼 수있다 here.

그래서 나는 간단한 것을 놓치고, String.replace()에서 람다 식을 사용하는 것에 대해 오해 한 적이 있습니까? 아니면 여기에 근본적으로 잘못된 것이 있습니까?

...

EXTRA 정보 : 관심의 경우 내가 지금 크롬 24을 사용하고 있습니다; 나는 얼마 전에 String.replace()의 익명의 함수를 모든 브라우저에서 사용할 수 없다는 것을 읽었지만 지금까지는 해결 될 것이라고 생각했다. (옵션은 ECMAScript v3에서 소개되었다.)

+2

JS 문자열은 변경 불가능하며 함수 *는 새 문자열을 반환합니다. – Bergi

+1

Btw, 그 함수 대신'$ 1 \\ s * (. *) \\ s * $ 2 "' – Bergi

+0

@Bergi 감사합니다. 문자열 대안을 알고 있었지만 더 복잡한 기능으로 주위를 돌고 있습니다. 그냥 기본을 바로 얻고 싶었습니다. – guypursey

답변

1

String.replace()은 원래 문자열을 변경하지 않지만 새 문자열을 반환합니다. 결과를 할당해야합니다.

for (i; i < r; i += 1) { 
    str = str.replace(rex[i], function(star, p1, p2) {...}) 
} 
+0

간단합니다. 나는 예제 중 어느 것과도 같이 나를 버렸던 참고서가 변수에 할당 된 결과라고 생각한다. 감사. – guypursey