2010-12-30 4 views
1

가 가능하다 문자열 교체를 실행하고 나는이 방법을 통해 수행해야하는 함수에서 값을 반환 eval를 사용할 수있는 정규식을 사용하여 배열 :문자열 교체시 eval() | 자바 스크립트

var message = $('#message').html(); 

var searchstring = [ 
    /<span style="color: rgb((.*), (.*), (.*));">(.*)<\/span>/gi, 
    // other regex 
]; 

var replacestring = [ 
    eval('RGBtoHex($1, $2, $3)'), 
    // other regex 
]; 

for(i = 0; i < searchstring.length; i++) 
{ 
    message = message.replace(searchstring[i], replacestring[i]); 
} 

$('.message-box').val(message); 

내가 RGB로 변환하려고 해요 16 진수 값으로 변환하여 rgb(255, 255, 255) ~ #FFFFFF과 같이 변경해야합니다. 그러나, 내가 이것을 할 때 방화범이 끌려서 : $1 is not defined이 위치 : eval('RGBtoHex($1, $2, $3)'),.

문자열 대체를 .replace()으로 수행하는 동안 eval() 함수를 실행하여 rgb를 16 진수 값으로 반환하려면 어떻게해야합니까?

모든 것이 평가 부분을 제외하고 완벽하게 작동합니다.

답변

6

그것은 그런 식으로 작동하지 않습니다. 원시 문자열 'RGBtoHex($1, $2, $3)'을 보내고
당신이 eval를 호출 할 때, 당신이 eval.

당신은 pass a function to replace해야합니다

message.replace(
    /rgb\((\d+), (\d+), (\d+)\)/gi, 
    function(str, r, g, b) { return RGBtoHEX(r, g, b); } 
); 
+0

아, 감사 교체시에 코드를 호출 할 수 있는지 확인하십시오. 나는 확실히 그 문서를 읽었습니다. 감사! :) * 3 분 안에 투표 할 것입니다 * – MacMac

+0

저는 약간의 호기심을 가지고 있습니다. str, r, g, b com은 어디에서 왔습니까? 나는이 코드를 가지고 있다고 말합니다.'var templateString = '

'; var regex =/\ | @ ([a-zA-z1-9 _] *) \ |/g; var imageURL = 'someImage.jpg'; var width = 500; var에하고 ReplaceString = templateString.replace (정규식, '$ 1') ' 수있는 이미지 URL 값과 폭 값을 얻기 위해 나는 어떻게 든 평가 $신가요? CONSOLE.LOG (Y); var에 값 = 평가 – Olga

+0

나는 그것을 밖으로 일 오 =) 아직 마법하지만'VAR하고 ReplaceString = templateString.replace (정규식, 기능 (X, Y) {을 console.log (X)처럼 보인다 (Y); 반환 값;} 은)'내가 필요 정확히 – Olga

0

귀하의 평가가 교체 배열을 만드는 동안 실행됩니다. 당신이 결과로 예를

"1234".replace(/\d/g,function(x){return parseInt(x)+1}) 

반환 "2345"을 위해 ... 단순히 대신 대체 문자열의 매개 변수를 받아들이는 기능을 전달하여 그것에 대한