ReplaceAll 不替换递归函数中的所有内容

ReplaceAll not replacing all in recursive function

我正在使用一个递归函数,它采用这样的模板字符串:

<div class='${classes}'>

并将模板文字占位符 ${类} 替换为对象中的值,如下所示:

{ classes: 'bg-${color} text-${color}', color: 'blue' }

这里需要注意的是,在对象内部,模板字符串嵌套比较多,所以才会有递归函数。

我无法解决的问题是为什么替换所有函数只替换 ${color} 的第一个实例,而第二个实例未定义。

下面的工作片段:

function buildTemplate(string) {
  var matched = false;
  string = string.replaceAll(/$\{(.*?)\}/g, function (match, key) {
    if (match) {
      matched = true;
    }
    const selection = selectors[key];
    delete selectors[key];
    return selection;
  });
  if (matched) {
    string = buildTemplate(string);
  }
  console.log(string);
}

let templateString = "<div class='${classes}'>";
const selectors = { classes: 'bg-${color} text-${color}', color: 'blue' }
buildTemplate(templateString);

您正在删除 selectors,当您需要两次时。
删除行;

// delete selectors[key]

selection没有分配任何东西

通过键访问的对象不需要删除任何东西。