Javascript用Pattern替换参数

时间:2014-04-20 00:26:16

标签: javascript

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

例如:

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

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

3 个答案:

答案 0 :(得分: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]
);

答案 1 :(得分:2)

format()函数添加到String原型中,如下所示:

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

答案 2 :(得分:1)

您可以将{regex与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.