You can use RegEx.
str.replace(/{[^{}]+}/g, m => tags[m] || m);
The function m => tags[m] || m
is using ES6 arrow function syntax.
Equivalent code in ES5:
function(m) {
return tags[m] || m;
}
If the matched string(tag) is found in the object, then the value of that tag is returned. If not then the matched string itself is returned.
RegEx Explanation:
{
: Match {
literal
[^{}]+
: Match one or more characters except {
and }
}
: Match }
literal
g
: Global flag
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;
I'll also suggest to use 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;