我有一个20万符号宽的字符串。我需要将\index{term1}
替换为\index0001{term1}
,将\index{term2}
替换为\index0002{term2}
等等。因此,对于每个字词,我都有一个索引号,我需要在{{1}之后插入}。如果特定术语遇到多个,则其索引号仍然相同。
预先知道此类替换的数量。我也知道每次更换的确切位置。
我怎样才能快速完成?
我是JS的新手,在С++中,我会为替换之间的新字符串和复制部分分配足够大的缓冲区,并在其间插入替换。
答案 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);