我有一个(AngularJS)项目,我将替换文本中的一些标签。例如:
{tag1} => one
{tag2} => two
{tag3} => three
使用JavaScript替换功能可以替换一个值:
text.replace('{tag1}', 'one');
但我有25个标签的列表。我想用标签和替换物制作一个对象。例如:
var tags = {"{tag1}":"one", "{tag2}":"two", "{tag3}":"three"};
text.replace(tags);
我该怎么做?
答案 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说明:
{
:匹配{
文字[^{}]+
:匹配除{
和}
}
:匹配}
文字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;
我还建议使用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。