首页 > 解决方案 > 使用 RegEx 替换字符串中的所有变量

问题描述

结合以前的几个答案,我试图组合一个正则表达式,它可以让我替换大括号内所有出现的任何东西

我已经到了这一步,但它似乎不起作用

var str = "The {type} went to the {place}";


var mapObj = {
   type: 'Man',
   place: "Shop"

};
var re = new RegExp(/(?<=\{)Object.keys(mapObj).join("|")(?=\})/, "gim");
str = str.replace(re, function(matched){
  return mapObj[matched.toLowerCase()];
});

console.log(str);

我在上一个答案中添加了 (?<={) 和 (?=}) 以使其仅匹配键在花括号内的匹配项

上一个答案 -用多个其他字符串替换多个字符串

标签: javascriptregex

解决方案


使用捕获组,您将获得作为替换回调的第二个参数的值:

var str = "The {type} went to the {place}";

var mapObj = {
  type: 'Man',
  place: "Shop"

};

str = str.replace(/\{([^{}]+)\}/gim, function(_, c) {
  return mapObj[c.toLowerCase()] || `{${c}}`;
});

console.log(str);


推荐阅读