I'm try to replace all occurances wihtin a string with the array index value as below.
var str = '<a href="{0}" title="{1}">{1}</a>';
var params= [];
params.push('Url', 'TitleDisplay');
for (i in params) {
var x = /'{' + i + '}'/g;
str = str.replace(x, params[i]);
}
No matter what I do, I cannot seem to get it to work. Dropping the '/g' works with one match, but not all. I know this is basic but for the lide of me I cannot get it to work.
4 Answers 4
Code:
var rx = /{([0-9]+)}/g;
str=str.replace(rx,function(0,ドル1ドル){return params[1ドル];});
The replace method loops through the string (because of /g in the regex) and finds all instances of {n} where n is a number. 1ドル captures the number and the function replaces {n} with params[n].
Comments
try using this:
var x = new RegExp("\\{" + i + "\\}", "g");
instead of this:
var x = /'{' + i + '}'/g;
Comments
You can build a regexp object if you need it to be dynamic
var str = '<a href="{0}" title="{1}">{1}</a>';
var params= [];
params.push('Url', 'TitleDisplay');
for (var i = 0; i < params.length; i++) {
var x = new RegExp('(\\{'+i+'\\})', 'g');
str = str.replace(x, params[i]);
}
alert(str);
Comments
How about this if you would like to skip a regex solution ..
function replaceAllOccurrences(inputString, oldStr, newStr)
{
while (inputString.indexOf(oldStr) >= 0)
{
inputString = inputString.replace(oldStr, newStr);
}
return inputString;
}
for... in...for arrays