3 回答
TA贡献1817条经验 获得超6个赞
您的代码不起作用的原因是因为window['__' + "$1"]首先评估,所以:
sentence.replace(/__(\w+)/gs,window['__' + "$1"]);
...变成:
sentence.replace(/__(\w+)/gs, window['__$1']);
由于window['__$1']window 对象上不存在,这会导致undefined,因此您会得到:
sentence.replace(/__(\w+)/gs, undefined);
这就是导致您获得undefined结果的原因。相反,您可以使用替换函数.replace()从第二个参数中获取组,然后将其用于回调返回的替换值:
var __total = 8;
var sentence = "There are __total planets in the solar system";
const res = sentence.replace(/__(\w+)/gs, (_, g) => window['__' + g]);
console.log(res);
但是,像这样访问窗口上的全局变量并不是最好的主意,因为这不适用于局部变量或使用letor声明的变量const。我建议您创建自己的对象,然后您可以像这样访问它:
const obj = {
__total: 8,
};
const sentence = "There are __total planets in the solar system";
const res = sentence.replace(/__(\w+)/gs, (_, g) => obj['__' + g]);
console.log(res);
TA贡献1995条经验 获得超2个赞
你可以eval()在这里使用一个例子:
let __total = 8;
let str = "There are __total planets in the solar system ";
let regex = /__(\w+)/g;
let variables = str.match(regex);
console.log(`There are ${eval(variables[0])} planets in the solar system`)
let __total = 8;
let str = "There are __total planets in the solar system ";
let regex = /__(\w+)/g;
let variables = str.match(regex);
console.log(`There are ${eval(variables[0])} planets in the solar system`)
TA贡献1846条经验 获得超7个赞
您必须拆分句子并使用变量来获取分配给它的值。
所以你必须使用'+'号来分割和添加到句子中
因此,您只需使用正则表达式即可找到该词。假设您将其存储在名为myVar的变量中。然后你可以使用下面的代码: sentence.replace(myVar,'+ myVar +');
所以你的最终目标是让你的句子像:
sentence = "There are "+__total+" planets in the solar system";
添加回答
举报