2012-07-12 111 views
1

我尝试用下面的数组索引值替换所有出现的字符串。简单的Javascript替换为循环

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]); 
} 

无论我做什么,我似乎无法得到它的工作。删除'/ g'只适用于一场比赛,但不是全部。我知道这是基本的,但对我来说,我无法让它工作。

+2

不要在使用'为......'数组 – Andreas 2012-07-12 06:35:15

回答

3

Fiddle here

代码:

var rx = /{([0-9]+)}/g; 
str=str.replace(rx,function($0,$1){return params[$1];}); 

的替换方法通过串循环(因为在正则表达式/ g)和发现的所有实例{N},其中n是一个数。 $ 1捕获该数字,函数用{params [n]替换{n}。

2

尝试使用这样的:

var x = new RegExp("\\{" + i + "\\}", "g"); 

,而不是这样的:

var x = /'{' + i + '}'/g; 
0

你可以建立一个RegExp对象,如果你需要它是动态的

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); 
​ 

http://jsfiddle.net/LByBT/

0

这个怎么样,如果你想跳过一个正则表达式的解决方案..

function replaceAllOccurrences(inputString, oldStr, newStr) 
{ 
    while (inputString.indexOf(oldStr) >= 0) 
    { 
     inputString = inputString.replace(oldStr, newStr); 
    } 

    return inputString; 
} 
+0

这在一个无限循环和崩溃结束? :/ – emotality 2015-07-05 17:33:26

+0

你可以分享你的代码和你使用的输入字符串 - 对我来说,我成功地在各种项目中使用它 – gnB 2015-07-06 01:32:56