(Multiple)用数组替换字符串

Sim*_*her 4 javascript jquery replace

我有一个大字符串,需要更换几次.如

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
...
Run Code Online (Sandbox Code Playgroud)

有没有办法将这些FIND和REPLACE参数放到一个数组中,并立即替换所有这些参数?如:

reps = [["UN","Ali"], ["LC","Turkey"], ["AG","29"], ...]
$(str).replace(reps)
Run Code Online (Sandbox Code Playgroud)

ken*_*ytm 26

不需要jQuery.

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

return str.replace(/\[(\w+)\]/g, function(s, key) {
   return reps[key] || s;
});
Run Code Online (Sandbox Code Playgroud)
  • 正则表达式/\[(\w+)\]/g查找表单的所有子字符串[XYZ].
  • 每当找到这样的模式时,.replace将调用第二个参数中的函数来获得替换.
  • 如果密钥存在(reps[key]),它将搜索关联数组并尝试返回该替换.
  • 否则,s将返回原始子字符串(),即不替换任何内容.(参见在Javascript中,当变量声明中存在逻辑运算符时,它意味着什么?关于如何||使其工作.)

  • +1,虽然:这假设替换永远不会是空字符串.@user:如果有时替换是空字符串,则将函数体改为`var rep = reps [key]; return typeof rep ==="undefined"?s:rep;` (2认同)