2011-08-20 3 views
1

문자열로 텍스트 대체를 수행해야하는 작은 웹 앱이 있습니다. 그러나 정상적인 string.replace는 작동하지 않습니다. 나는 텍스트의 일부분을 수정하고 나서 원래의 문자열로 되돌려 놓아야한다. 내가 가진 예를 들어, : 나는 001.00과 000.99을 교체 할 때, 그리고JavaScript 문자열 다중 대체

var new_vals = [001.00, 001.01] 

:

var text = 'TEXT 000.99 001.00 TEXT' 

나는 이러한 각 숫자에 0.01를 추가 할 필요가, 나는 결과의 배열을 가지고 , 그것은 작동하고 다음 문자열을 내게 줄 것이다 :

text = 'TEXT 001.00 001.00 TEXT' 

지금 나는 문제가있다. 다음 대체 001.00 <해야한다 - 001.01을하지만, 이렇게하면 될 것입니다에 :

text = 'TEXT 001.01 001.00 TEXT' 

내 질문에, 같은에서 교체 A는/여러 검색을 수행 할 수있는 기능을 대신 제공하는 모든 JS 라이브러리의 알고있다 시간과 복사 문자열?

답변

3

기능과 함께 사용 str.replace :

var text = 'TEXT 000.99 001.00 TEXT'; 
var new_vals = ["001.00", "001.01"]; 
var index = 0; 
//Returns a new result string 
var result = text.replace(/\b([\d.]+)\b/g, function(substr, num, offset, str){ 
    //See if the number is actually a number 
    var num = parseFloat(num); 
    //If not, return original 
    if(isNaN(num)) 
    return substr; 
    //Return the number from new_vals and increment the index 
    else 
    return new_vals[index++]; 
}); 
//result == "TEXT 001.00 001.01 TEXT" 

을 또는, 당신은 기능의 추가를 할 수있는 :

var text = 'TEXT 000.99 001.00 TEXT'; 
//Returns a new result string 
var result = text.replace(/\b([\d.]+)\b/g, function(substr, num, offset, str){ 
    //See if the number is actually a number 
    var num = parseFloat(num); 
    //If not, return original 
    if(isNaN(num)) 
    return substr; 
    //Return num+0.01 with 2 decimal places 
    else 
    return (num+0.01).toFixed(2); 
}); 
//result == "TEXT 1.00 1.01 TEXT" 
+0

감사합니다. ECMA 스크립트 초안을 읽는 동안 방금 같은 결론에 도달했습니다. 그것은 대체로 string.replace에 대해 말합니다 : "일단 대체가 수행되면, 새로운 대체 텍스트는 더 이상의 대체 대상이되지 않습니다." 일종의, 내가 원했던 것, 사본에 작동하는 대체품. – Jibran

0

간단한 문자열 대신 global replace regexp를 사용해보십시오. 간단한 문자열은 첫 번째로 일치하는 인스턴스 만 바꿉니다.

'TEXT 001.00 001.00 TEXT'.replace(/001.00/g, '001.01'); 
+0

내가 그랬어. 그 때 문제가 발견되었습니다. 001.99로 000.99를 처음으로 대체하는 것이 좋습니다. 문제는 001.001을 001.00으로 교체하려고 시도 할 때 첫 번째 001.00 (000.99을 대체 한 후 얻은 것)을 대체한다는 것입니다. 사본에서 작업하는 동안 문자열에 대해 여러 대체 작업을 수행하는 함수가 필요합니다. – Jibran

+0

대문자 'g'를 정규식에 포함 시켰습니까? 그러면 강제로 대체해야합니다. –

0

split(' ') 값을 배열로 시도 할 수 있습니다. 그런 다음 루프를 사용하여 특정 요소를 수정하십시오. join(' ')에 이어 텍스트를 문자열로 다시 결합합니다.

+0

문제는 모든 텍스트가 단 하나의 공백을 포함하고 있지만 실제로는 그렇지 않을 수도 있다는 것입니다. 그리고 공간의 개수를 그대로 유지하는 것은이 응용 프로그램에 중요합니다. – Jibran