使用数组填写格式字符串

时间:2014-08-12 14:00:06

标签: javascript string format

我正在尝试获取数组并在格式字符串中使用其值。

var arry = ["1", "2", "3"];
alert("Numbers {0} equal {2} - {1}.".format(arry));

问题是这会给Number 1,2,3 equals {2}-{1}.而不是Number 1 equals 3 - 2.的期望结果。有没有办法得到这个结果而不必做某种for循环?

2 个答案:

答案 0 :(得分:0)

function arrayFormat(str, arr) {
    return str.replace(/{(\d+)}/g, function(match, m1) {
        return (m1 in arr) ? arr[m1] : match;
    });
}

这使用String.prototype.replace(),第二个参数作为函数。它使用括号中每次出现的数字作为键,并将该事件替换为与该键对应的数组中的值。

See it in action here.

答案 1 :(得分:0)

你可以试试这个:

String.format = function() {
  var s = arguments[0];
  for (var i = 0; i < arguments[1].length; i++) {       
      var reg = new RegExp("\\{" + i + "\\}", "gm");             
      s = s.replace(reg, arguments[1][i]);
  }
  return s;
}
var arry = ["1", "2", "3"];

console.log(String.format("Number {0} equal {2} - {1}.",arry)); //Numbers 1 equal 3 - 2.
console.log(String.format("Number {0} equal {2} - {1}.",'1')); //Numbers 1 equal {2} - {1}.
console.log(String.format("Number {0} equal {2} - {1}.",'12')); //Numbers 1 equal {2} - 2.
console.log(String.format("Number {0} equal {2} - {1}.",'123')); //Numbers 1 equal 3 - 2.

demo