Reputation: 633
I met with the following problem. I wanted to replace a tag on the name of the corresponding element of the array string. Maybe a little awkwardly explain it, so I will show you the code:
var test = [];
test['some'] = 'Some test';
var content = '{some}';
document.write(content.replace(/{([^}]+)}/g, test[RegExp.$1])); // It doesn't work
document.write(test[RegExp.$1]); // It work
Now my question: why the replace tag is not getting the string held in the test ['some'] (get undefined)? During the second attempt to get normal string 'Some test'. How to fix it to properly converted tags when converting?
Upvotes: 3
Views: 440
Reputation: 27614
Check this demo jsFiddle
var test = [];
test['some'] = 'Some test';
var content = '{some}';
document.write(content.replace(new RegExp('/{([^}]+)}/','g'), test['some']));
document.write(test['some']);
{some}Some test
Here i check your regexp work perfect Hope this help you!
Upvotes: 1
Reputation: 784958
You need to escape { and }
as they both are special regex symbols:
Use this regex:
/\{([^}]+)\}/g
EDIT: You need String#replace
with custom function handler:
repl = content.replace(/\{([^}]+)\}/g, function($0, $1) {return test[$1];});
Upvotes: 1