2012-07-12 77 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