2011. 12. 8. 18:24

가변적인 정규표현식이 필요할 경우

정규표현식 등을 사용하여 치환을 해야 할 경우 replace 에 문자열 처리만 하면 한번밖에 치환이 되지 안는다.

아래와 같이 유동적이거나 여러개의 문자패턴을 치환하고자 할때 replace 의 정규표현식에서 문제가 생기게 된다.

var key = ['__A__','__B__'];
var str = '가나다__A__ 라마바 __A__ 사아자 __B__ 카타파 __B__';

for(var i in data) {
    str.replace(data[i], '문자'); -> 한개만 변경이 된다.
    str.replace(/data[i]/g, '문자'); -> 변경되지 않는다.
}


--------------------------------------------------------------------
해결 방법은 의외로 아주 간단한데 아래와 같이 정규식 객체를 생성해서 대입하는 것이다.

var key = ['__A__','__B__'];
var str = '가나다__A__ 라마바 __A__ 사아자 __B__ 카타파 __B__';
var reg_exp = null;

for(var i in data) {
   
reg_exp = new RegExp(data[i], 'g');
    str.replace(reg_exp, '문자');
}