5

假设我的 javascript 代码中有以下字符串:

var myText = 'Hello %1. How are you %2?';

现在我想在上面的字符串中注入一些东西来代替 %1 和 %2 。我可以:

var result = myText.replace('%1', 'John').replace('%2', 'today');

我想知道是否有比调用 2 次替换函数更好的方法。

谢谢。

4

3 回答 3

17

format帮手怎么样?这基本上就是你需要的:

function format(str, arr) {
  return str.replace(/%(\d+)/g, function(_,m) {
    return arr[--m];
  });
}

var myText = 'Hello %1. How are you %2?';
var values = ['John','today'];

var result = format(myText, values);

console.log(result); //=> "Hello John. How are you today?"

演示:http: //jsbin.com/uzowuw/1/edit

于 2013-05-04T07:45:44.880 回答
0

试试这个样本

function setCharAt(str,chr,rep) {
    var index = -1;
    index= str.indexOf(chr);
    var len= chr.length;
    if(index > str.length-1) return str;
    return str.substr(0,index) + rep + str.substr(index+len);
}

var myText = 'Hello %1. How are you %2?';

var result = setCharAt(myText,"%1","John");
var result = setCharAt(result,"%2","today");

alert(result);
于 2013-05-04T07:54:19.013 回答
0

这只是对 elclarns 出色答案的复杂评论,提出了以下替代方案:

  1. 可以写成String.prototype
  2. 可以使用arguments

该功能可以更改为

String.prototype.format = function() {
  var args=arguments;
  return this.replace(/%(\d+)/g, function(_,m) {
    return args[--m];
  });
}

并以这种方式调用

var result = "I am %1, %2 years old %1".format("Jan",32);
// I am Jan, 32 years old Jan
于 2013-05-04T08:06:11.973 回答