2011-01-31 243 views
4

我有一个需要被替换几次的大字符串。如(多个)用数组替换字符串

var str="Username:[UN] Location:[LC] Age:[AG] ... " 

str=str.replace("[UN]","Ali") 
str=str.replace("[LC]","Turkey") 
str=str.replace("[AG]","29") 
... 
//lots of replace 
... 

有没有办法将这些FIND和REPLACE参数放到一个数组中,并且一次全部替换它们?如:

reps = [["UN","Ali"], ["LC","Turkey"], ["AG","29"], ...] 
$(str).replace(reps) 
+0

@KrzysztofSafjanowski应该反过来,因为这是一个比你重复的提案 – 2016-11-03 11:38:13

回答

25

不需要jQuery。

var reps = { 
    UN: "Ali", 
    LC: "Turkey", 
    AG: "29", 
    ... 
}; 

return str.replace(/\[(\w+)\]/g, function(s, key) { 
    return reps[key] || s; 
}); 
+2

+1年纪大了,虽然:这假设替换不会是空字符串。 @user:如果有时替换为空字符串,则将函数体改为`var rep = reps [key]; return typeof rep ===“undefined”? s:rep;` – 2011-01-31 06:55:55

3

你可以这样做:

var array = {"UN":"ALI", "LC":"Turkey", "AG":"29"}; 

for (var val in array) { 
    str = str.split(val).join(array[val]); 
}