我只想基于模式替换字符串中的所有参数:

例如:

var myString = "Hello Mr.{param1}, today is {param2} and hope ...";

我不知道如何找到{#}模式并用JavaScript中的值替换。

===============>>#1 票数:2 已采纳

function replace(str, params) {
    for(var i in params)
        if(params.hasOwnProperty(i))
            str = str.replace('{'+i+'}', params[i]);
    return str;
}
replace("Hello Mr.{param1}, today is {param2} and hope ...", {
    param1: 'foo',
    param2: 'bar'
}); // "Hello Mr.foo, today is bar and hope ..."

请注意,只有每个参数的第一次出现都会被替换。


如果要替换所有出现的内容,请replace使用

str = str.replace(
    new RegExp(
        ('{'+i+'}').replace(/[.^$*+?()[{\|]/g, '\\$&'),
        'g'
    ),
    params[i]
);

===============>>#2 票数:2

像这样向String原型添加一个format()函数:

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

    return s;
};

然后,您可以在像这样的任何字符串上调用format()

var myString = 'Hello Mr. {0}, today is {1} and hope ...';
var formattedString = myString.format('John Doe', 'April, 19, 2014');

formattedString将是: Hello Mr. John Doe, today is April, 19, 2014 and hope ...

===============>>#3 票数:1

您可以将regex与replace一起replace ,类似以下这样:

function format(str, obj) {
  var re = /\{(.+?)\}/g;
  return str.replace(re, function(_,m){return obj[m]});
}

并像这样使用它:

format('Hello, my name is {name}, I am {age} years old', {
  name: 'Peter',
  age: '30'
});
//^ Hello, my name is Peter, I am 30 years old.

  ask by Nav translate from so

未解决问题?本站智能推荐: