如何用文本中的更多值替换?

时间:2016-04-15 08:44:01

标签: javascript angularjs replace

我有一个(AngularJS)项目,我将替换文本中的一些标签。例如:

{tag1} => one
{tag2} => two
{tag3} => three

使用JavaScript替换功能可以替换一个值:

text.replace('{tag1}', 'one');

但我有25个标签的列表。我想用标签和替换物制作一个对象。例如:

var tags = {"{tag1}":"one", "{tag2}":"two", "{tag3}":"three"};
text.replace(tags);

我该怎么做?

3 个答案:

答案 0 :(得分:6)

您可以使用RegEx。

str.replace(/{[^{}]+}/g, m => tags[m] || m);

函数m => tags[m] || m使用ES6 arrow function语法。 ES5中的等效代码:

function(m) {
    return tags[m] || m;
}

如果在对象中找到匹配的字符串(标记),则返回该标记的值。如果不是,则返回匹配的字符串。

RegEx说明:

  1. {:匹配{文字
  2. [^{}]+:匹配除{}
  3. 以外的一个或多个字符
  4. }:匹配}文字
  5. g:全球旗帜
  6. var str = 'Hello {tag1}, I\'m {tag2}. Where is {tag3}. - {tag1} {NoTag}';
    
    var tags = {
        "{tag1}": "one",
        "{tag2}": "two",
        "{tag3}": "three"
    };
    
    str = str.replace(/{[^{}]+}/g, m => tags[m] || m);
    
    console.log(str);
    document.body.innerHTML = str;

    我还建议使用ES6 template literals

    var tag1 = 'one',
        tag2 = 'two',
        tag3 = 'three';
    
    var str = `Hello ${tag1}, I\'m ${tag2}. Where is ${tag3}.`;
    

    var tag1 = 'one',
        tag2 = 'two',
        tag3 = 'three';
    
    var str = `Hello ${tag1}, I\'m ${tag2}. Where is ${tag3}.`;
    
    document.body.innerHTML = str;

答案 1 :(得分:3)

您可以循环遍历标记对象:

var tags = {"{tag1}":"one", "{tag2}":"two", "{tag3}":"three"};
for(var key in tags)
    text.replace(new RegExp(key, 'g'), tags[key]);

答案 2 :(得分:-1)

您可以使用'/ g'regexp后缀替换所有匹配项,直到文本末尾,如下所示:

text.replace(new RegExp('{tag1}', "g"), 'one');

有关Javascript字符串替换的更多信息,请访问here