2011-09-23 3 views
1

문자열의 토큰을 대체하는 코드 조각이 있습니다. 대체 값이 배열에 저장되어 있습니다.RegEx JavaScript의 대체

기본적으로 문자열을 분석하고 배열 키로 바꾸고 싶습니다. 예를 들어 [my_forename]의 인스턴스를 replacements['my_forname']으로 바꾸겠습니다. 배열의 키는 문자열의 대괄호 사이에있는 것과 동일합니다.

보다 포괄적 인 뷰 : 사람이 교체를 처리하는 정규식을 제공 할 수있는 경우

replacements['my_forename'] = 'Ben'; 
replacements['my_surname'] = 'Major'; 
replacements['my_verbose_name'] = 'Ben Major'; 

// The following is the input string: 
// 'My name is [my_forename] [my_surname], or [my_verbose_name].'; 
// And it should output: 
// 'My name is Ben Major, or Ben Major.'; 

, 나는 감사하겠습니다. 마찬가지로 하나 개 이상의 인스턴스가 될 것이라고 가능하지만, 내가 처리 한 그 다음 replaceAll 기능 사용 : 포함 아무것도에서 RegExp 객체를 생성하기 때문에,이 비록 최대 스택 한계가 발생

String.prototype.replaceAll = function(needle, replacement) 
{ 
    return this.replace(new RegExp(needle, 'g'), replacement); 
} 

[] 문제가 발생합니다.

도움을 주시면 감사하겠습니다!

답변

3
function tmpl(s, o) { 
    return s.replace(/\[(.+?)\]/g, function (_, k) { return o[k] }) 
} 

여기에 a demo입니다.

+0

을 정확히 내 생각을. 빨리 약 1 분 :) – usoban

1

sprintf() 또는 vsprintf()를 사용하지 않는 이유는 무엇입니까? 참조를 위해이 페이지 확인 : http://www.diveintojavascript.com/projects/javascript-sprintf

토큰을 바꾸는 대신 문자열에 자동으로 값으로 바뀌거나 vsprintf()의 경우 배열에서 바로 값을 가져옵니다.