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

Jan*_*ijk 2 javascript replace angularjs

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

{tag1} => one
{tag2} => two
{tag3} => three
Run Code Online (Sandbox Code Playgroud)

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

text.replace('{tag1}', 'one');
Run Code Online (Sandbox Code Playgroud)

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

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

我怎样才能做到这一点?

Tus*_*har 6

您可以使用RegEx.

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

该函数m => tags[m] || m使用ES6 箭头函数语法.ES5中的等效代码:

function(m) {
    return tags[m] || m;
}
Run Code Online (Sandbox Code Playgroud)

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

RegEx说明:

  1. {:匹配{文字
  2. [^{}]+:匹配除{和之外的一个或多个字符}
  3. }:匹配}文字
  4. g:全球旗帜

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;
Run Code Online (Sandbox Code Playgroud)

我还建议使用ES6 模板文字.

var tag1 = 'one',
    tag2 = 'two',
    tag3 = 'three';

var str = `Hello ${tag1}, I\'m ${tag2}. Where is ${tag3}.`;
Run Code Online (Sandbox Code Playgroud)

var tag1 = 'one',
    tag2 = 'two',
    tag3 = 'three';

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

document.body.innerHTML = str;
Run Code Online (Sandbox Code Playgroud)