2014-03-25 4 views
-1

을 유지 나는이 같은 문자열을 분할하기 위해 노력하고있어. 나는 변수 이름이 무엇인지 미리 알지 못한다. 그래서 나는 "대체"를 사용하는 것을 피하려고했다.분할 문자열과 deliminter

+0

입니다 그리고 내가 요청할 수'replace'를 사용하여 피할 수있는 점은 무엇인가? – raina77ow

+0

@Raina, 먼저 문자열에 지정된 변수가 실제로 먼저 있는지 확인하고 싶습니다. 이 문자열은 구성 파일에서옵니다. – user994165

답변

2

실제로 (모든 데이터를 포함) 일부 미리 정의 된 개체의 재산 다룰 때 오히려 사소한 여분의 일을해야 하나 개 이상의 변수가있는 경우

var str = "abcde${variable}zzz" 
var key = str.match(/\$\{.*\}/g); 
var listOfelements = str.split(key[0]); 

. 예 :

템플릿 기능의 작동 방식은 다소 차이가 있습니다. 전역 변수를 사용하여 동일한 트릭을 수행 할 수 있습니다 (글로벌 오브젝트를 통해 액세스 할 수 있음). 예를 들면 :

// on the global level 
var foo = 'FOOFOO'; 
var bar = 'BARBAR'; 
... 
tpl.replace(/\$\{([^}]+)}/g, function(match, gr) { 
    return gr in window ? window[gr] : match; 
}) 

그것은 지역 주민과 함께 할도 가능하지만, 당신이 여기 eval를 사용해야합니다 :

(function(){ 
    var foo = 'FOOFOO'; 
    var bar = 'BARBAR'; 

    var tplFoo = "abcde${foo}fgh${foo}z"; 
    var tplBar = "abcde${bar}fghz"; 
    var tplBaz = "abcde${baz}fghz"; 
    [tplFoo, tplBar, tplBaz].forEach(function(tpl) { 
    console.log(
     tpl.replace(/\$\{([^}]+)}/g, function(match, gr) { 
     'use strict'; 
     try { 
      var v = eval(gr); 
      return v; 
     } 
     catch(_) { 
      return match; 
     } 
     }) 
    ); 
    }); 
})(); 

...하는이 간단한 경우, 매우 발생할 수 있습니다 ... 불필요한 결과.

0

이와 비슷한? 당신은 당신이

0
var config = { 
    'foo': 'abc' 
}; 

var str = 'foo: ${foo} bar: ${bar}'; 

var matches = str.match(/(\$\{\w+\})/g); 

if(matches !== null) { 
    for(var i=0,l=matches.length;i<l;i++) { 
     var token = matches[i]; 
     var tvar = token.substr(2,token.length-3); 

     if(tvar in config) { 
      str = str.replace(token,config[tvar]); 
     } 
     else { 
      str = str.replace(token,'null'); 
     } 
    } 
} 

console.log(str); 
+0

왜'match '로 문자열을 처리해야합니까? 결국'replace'를 할 때 궁금합니다. 콜백 매개 변수를 'replace'함수에 제공하여 단일 접근 방식으로 모든 작업을 수행 할 수 있습니다. – raina77ow

+0

교체를하기 전에 결과로 일을 할 수 있도록 분명히했습니다. 분명히이 방법은 비교 적으로 원시적입니다. –

0

이 정보가 필요하십니까?

var x = "abcde${variable}zzz"; 
alert(x.replace(/{.*}/, 'new_word')); 

또는 당신이 인덱스를 수행하려는 경우 나 SO 자체에서 답을 찾을 .. 여기가 link