如何用其他文本替换正则表达式{{someText}}?

时间:2015-10-07 18:03:43

标签: javascript regex

我有一个输入字符串:

var mystring = "{{myDog}} is a good dog"

OR

var mystring =“{{anotherDog}}是一只好狗”

现在,使用replace方法和正则表达式,我想替换"{{myDog}}" "{{anotherDog}}""Tommy"

注意:我不想依赖2组花括号中的字符串。所以,2个花括号之间可以有任何东西,花括号应该被Tommy取代。 因此,myString.replace('{{myDog}}', 'Tommy')无效。

所以,

mystring.replace('**someregularexpressionhere**', 'Tommy');
"Tommy is a good dog" // this should be value returned.

我如何撰写正则表达式?

2 个答案:

答案 0 :(得分:2)

我写过小模板功能,你可以尝试一下

function tpl(str, data) {
    Object.keys(data).forEach(function (key) {
    	str = str.replace(new RegExp('\{\{' + key + '\}\}'), data[key]);
    });
    
    return str;
}
                       
console.log(
    tpl('{{myDog}} is a good dog, {{anotherDog}}', { myDog: 'Tommy', anotherDog: 'Jim' })
);

<强>更新

function tpl(str, data) {
    return str.replace(/\{\{(.+?)\}\}/g, function (match) {
        return data.shift() || match;
    });
}
                       
console.log(
    tpl('{{a}} is a good dog, {{b}}', ['Tommy', 'JIm'])
);

答案 1 :(得分:1)

建立一个 RegExp ,让您拨打.replace一次就像这样

function replaceTemplate(str, dict) {
    var re = RegExp('\\{\\{(' + Object.keys(dict).join('|') + ')\\}\\}', 'g');
    return str.replace(re, function (a, b) {
        return dict[b];
    });
}

var s = '{{foo}} is {{bar}}',
    d = {
        foo: 'long day',
        bar: 'long'
    };
replaceTemplate(s, d); // "long day is long"