2012-12-05 3 views
11

여기 내 문제가 있습니다. 나는 그 안에 대소 문자가 혼합 된 문자열을 가지고있다. 사건과 관계없이 검색 한 다음 성냥의 양쪽에있는 일부 문자로 성냥을 바꾸고 싶습니다. 예를 들어regex로 바꾸고 대문자로 유지하는 방법

:

var s1 = "abC...ABc..aBC....abc...ABC"; 
var s2 = s.replace(/some clever regex for abc/g, "#"+original abc match+"#"); 

처럼 끝나야한다 (S2)에서 그 결과

"#abC#...#ABc#..#aBC#....#abc#...#ABC#" 

이이 정규식 함께 할 수 있습니까? 그렇다면 어떻게?

답변

25

이 작업은 regex replace에 콜백 함수를 사용하여 수행 할 수 있습니다.

var s1 = "abC...ABc..aBC....abc...ABC"; 

var s2 = s1.replace(/abc/ig, function (match) { 
    return "#" + match + "#" ; 
} 
); 

alert(s2); 

데모 : http://jsfiddle.net/dxeE9/

+0

유망한 소리를 들려 주실 수 있습니까? – Graham

+0

브릴리언트 - 감사합니다. – Graham

+0

@ 그래함의 광산은 황당하지 않습니까? ;-) 그것은 짧고 아마 빠릅니다 ;-) –

15

이것은 백 참조를 사용하여 수행 할 수 있습니다 :

var s2 = s.replace(/(your complex regex)/g, "#$1#") 

당신이 어떤 경우에 "ABC"와 일치 할 경우 :

var s2 = s.replace(/(abc)/ig, "#$1#") 
+0

정규식은 무엇입니까? – Graham

+0

@Graham은 귀하의 것과 동일합니다. 나는 "abc"가 당신이 이미 일치하는 법을 알고있는 다른 것을위한 자리 표시 자라고 가정했다. –

+0

이것은 또한 작동합니다 - 고맙습니다 – Graham

5

이 작업을 수행 할 수도 있습니다

yourString.replace(/([a-z]+)/ig, "#$1#") 
+0

이것은 모든 출현을 # abC#으로 바꿉니다. 내가 원하지 않는 것이 있습니다. – Graham

+0

@Graham 모든 출현과 일치시키고 싶지 않으면'g'를 제거 할 수 있습니다 – Anirudha