用字符串替换字符串中的多个字符会重写字符

Replacing multiple characters in a string with a string rewrites characters

本文关键字:字符 字符串 重写 替换      更新时间:2023-09-26

我有一个变量(在本例中为var str = "I!%1$s-I!%2$s TTL!%3$s";),我想用数组(var regex = ['aaa', 'bbb', 'ccc'];)中的元素替换%

我搜索了一下,找到了这个解决方案,但我在实施时遇到了麻烦。我的问题是,我想用多个字符替换单个字符,然后继续字符串,但这只是覆盖字符。我也不知道为什么。

任何帮助是感激的,我的代码下面

String.prototype.replaceAt = function(index, character) {
  return this.substr(0, index) + character + this.substr(index + character.length);
}
var str = "I!%1$s-I!%2$s TTL!%3$s";
var regex = ['replace', 'replace', 'replace'];
//find position of %
var find = /%/gi,
  result, pos = [];
while ((result = find.exec(str))) {
  pos.push(result.index);
}
//replace % with regex elements
for (x = 0; x < pos.length; x++) {
  str = str.replaceAt(pos[x], regex[x]);
}
document.write(str);

使用替换函数,如下所示

var str = "I!%1$s-I!%2$s TTL!%3$s";
var regex = ['[123]', '[456]', '[789]'];
console.log(str.replace(/%('d+)/g, function(match, group1) {
  return regex[parseInt(group1) - 1] + group1;
}));
// I![123]1$s-I![456]2$s TTL![789]3$s

RegEx /%('d+)/g匹配模式%后面跟着一个或多个数字的任何内容。它将数字作为一个组来捕获。然后将精确匹配和组传递给函数以获得实际的替换。在函数中,使用parseInt将组转换为数字,并从regex数组返回相应的值。