很多插入一个大字符串

时间:2017-01-29 08:48:41

标签: javascript string performance memory insert

我有一个20万符号宽的字符串。我需要将\index{term1}替换为\index0001{term1},将\index{term2}替换为\index0002{term2}等等。因此,对于每个字词,我都有一个索引号,我需要在{{1}之后插入}。如果特定术语遇到多个,则其索引号仍然相同。

预先知道此类替换的数量。我也知道每次更换的确切位置。

我怎样才能快速完成?

我是JS的新手,在С++中,我会为替换之间的新字符串和复制部分分配足够大的缓冲区,并在其间插入替换。

2 个答案:

答案 0 :(得分:1)

看看这个

function pad(num){
  return ("0000"+num).slice(-4);
}
var longstring = "\indexterm1, \indexterm3, \indexterm3",
 terms = ["term1","term2","term3"],
  parts = longstring.split("index");

for (var i=1;i<parts.length;i++) { // start at 1 since \index splits weird
  var part = parts[i].split(",")[0],
      pos = terms.indexOf(part);
  parts[i]="\\index"+pad(pos+1)+part+", ";
}
longstring=parts.join("");

console.log(longstring);

答案 1 :(得分:1)

您可以将数字分开并填充它并将其与匹配的字符串一起返回。

var string = '\index{term1}\index{term2}\index{term95}',
    result = string.replace(/\{term(\d+)\}/g, function (match, n) {
        n = n.toString();
        while (n.length < 4) {
            n = '0' + n;
        }
        return n + match;
    });

console.log(result);