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
没有分配任何东西
通过键访问的对象不需要删除任何东西。
我正在使用一个递归函数,它采用这样的模板字符串:
<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
没有分配任何东西
通过键访问的对象不需要删除任何东西。