JavaScript字符串多次替换

时间:2011-08-20 12:22:29

标签: string javascript

我有一个小型的网络应用,我需要在字符串中执行文本替换。但是,正常的string.replace将不起作用。我正在修改部分文本,然后我需要将它们放回原始字符串中。例如,如果我有:

var text = 'TEXT 000.99 001.00 TEXT'

我需要在这些数字中加上0.01,我有一系列结果:

var new_vals = [001.00, 001.01]

然后,当我尝试用001.00替换000.99时,它会工作并给我以下字符串:

text = 'TEXT 001.00 001.00 TEXT'

现在我遇到了问题。下一个替换应该是001.00< - 001.01,但这样做会导致:

text = 'TEXT 001.01 001.00 TEXT'

我的问题是,您是否知道任何提供替换功能的JS库可以同时执行多个搜索/替换以及字符串的副本

3 个答案:

答案 0 :(得分: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"

答案 1 :(得分:0)

尝试使用全局替换regexp而不是简单的字符串。简单字符串将仅替换第一个匹配的实例。

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

答案 2 :(得分:0)

您可以尝试将值split(' ')放入数组中。然后使用循环修改特定元素。接下来是join(' ')将文本重新加入字符串。