【问题标题】:(Multiple) Replace string with array [duplicate](多个)用数组替换字符串[重复]
【发布时间】:2011-06-18 09:49:09
【问题描述】:

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

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)

【问题讨论】:

  • @KrzysztofSafjanowski 它应该是另一种方式,因为这个比你的重复提案更旧

标签: javascript jquery replace


【解决方案1】:

不需要 jQuery。

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

return str.replace(/\[(\w+)\]/g, function(s, key) {
   return reps[key] || s;
});
  • 正则表达式/\[(\w+)\]/g 查找[XYZ] 形式的所有子字符串。
  • 只要找到这样的模式,就会调用.replace的第二个参数中的函数来获取替换。
  • 它将搜索关联数组并尝试在键存在时返回该替换 (reps[key])。
  • 否则,将返回原始子字符串 (s),即不替换任何内容。 (请参阅 In Javascript, what does it mean when there is a logical operator in a variable declaration? 了解 || 是如何实现这项工作的。)

【讨论】:

  • +1,虽然:这假定替换永远不会是空字符串。 @user:如果有时替换为空字符串,请将函数主体更改为var rep = reps[key]; return typeof rep === "undefined" ? s : rep;
  • 刚刚在Chrome的控制台试了一下,不行。 var reps = { UN: "Ali", LC: "Turkey", AG: "29" };,然后是var str = "hello UN, I'm in LC, AG",最后str.replace(/\[(\w+)\]/g, function(s, key) { return reps[key] || s; });返回初始字符串,没有任何替换。
  • @maxagaz 请检查 OP 的问题,strvar str = "Username:[UN] Location:[LC] Age:[AG]"。 UN、LC 和 AG 周围有括号。
【解决方案2】:

你可以这样做:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-16
    • 1970-01-01
    • 1970-01-01
    • 2015-03-17
    • 1970-01-01
    • 1970-01-01
    • 2019-01-14
    • 2015-03-31
    相关资源
    最近更新 更多