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

时间:2016-02-20 20:26:18

标签: javascript arrays string

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

我们说我有:

#Working:
my $var= "Hello, this is test output";

printf ("%20s\n", $var);

 #output:           
 #Hello, this is test output 

#not working:     
my $yaxis= "20";
printf ("%${yaxis}s\n", $var);

#Output:
#                       Hello  

现在我需要找出一种方法来替换{1},使用数组中第一个索引的值,并将{2}替换为数组的第二个索引的值。

所以字符串会这样:

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

这看起来很简单,但我对此深感不安。我无法轻易找到一种方法。

3 个答案:

答案 0 :(得分:5)

您可以将replace与正则表达式和函数一起使用:

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

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

或者,新的ES6方式正在使用tagged template strings

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}.`

答案 1 :(得分:1)

您可以使用Array.prototype.reduce

&#13;
&#13;
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);
&#13;
&#13;
&#13;

它是正则表达式的一个很好的替代品,我不能确定我是否以正确的方式做了jsPerf test,但它表明这种方法优于正则表达式。< / p>

答案 2 :(得分:1)

像这样

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