Javascript - 查找用数组中的值替换字符串的一部分

Javascript - Find an replace a part of a string with value from an array

本文关键字:替换 字符串 一部分 查找 数组 Javascript      更新时间:2023-09-26

我有一个字符串,但在字符串中的某些点它有动态值。我想在字符串中找到这些点并用数组中的值替换它们。

假设我有:

var array = ['string', 'value'];
var string = 'This is a {1}, and this is a {2}.';

现在我需要想办法用数组中第一个索引的值替换{1},{2}用数组第二个索引的值替换

所以字符串是这样的:

This is a string, and this is a value.

这看起来很简单,但我对此感到沮丧。我找不到轻松做到这一点的方法。

您可以将

replace与正则表达式和函数一起使用:

string.replace(/{('d+)}/g, function(match, n) {
  return array[n-1];
});

您还可以检查n < 1 || n > array.length以提供回退值,以防数字超出范围。

或者,新的 ES6 方式是使用标记的模板字符串

function tag(strings, ...values) {
  var parts = [];
  for(var i=0; i<strings.length; ++i)
    parts.push(strings[i], array[values[i]-1]);
  return parts.join('');
}
tag`This is a ${1}, and this is a ${2}.`

像这样

string.replace(/'{('d+)'}/g, function(m, n){
  return array[n-1]
})

您可以使用Array.prototype.reduce

var StringHelper = {
  format: function(format, args) {
    return args.reduce(function(result, currentReplace, currentReplaceIndex) {
      result = result.replace("{" + (currentReplaceIndex + 1) + "}", args[currentReplaceIndex]);
      return result;
    }, format);
  }
};
var sourceString = "My name is {1} and I'm {2} years old";
var replaceItems = ["Matías", "31"];
var parsedString = StringHelper.format(sourceString, replaceItems);
alert(parsedString);

它是正则表达式的一个很好的替代方案,我不确定我是否以正确的方式进行了 jsPerf 测试,但它表明这种方法优于正则表达式。