用使用该字符串作为变量名的变量替换某些字符串

我有一些动态创建的变量。所有变量都使用双下划线('__')作为前缀。所以我想要做的是用变量替换句子中包含双下划线前缀的任何字符。这是一个例子:

输入

var __total = 8;
var sentence = "There are __total planets in the solar system";

预期结果

太阳系中有8颗行星

这是我解析字符串的正则表达式,但它返回未定义:

sentence.replace(/__(\w+)/gs,window['__' + "$1"]);


慕娘9325324
浏览 102回答 3
3回答

慕的地6264312

您的代码不起作用的原因是因为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);

拉风的咖菲猫

你可以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`)

喵喵时光机

您必须拆分句子并使用变量来获取分配给它的值。所以你必须使用'+'号来分割和添加到句子中因此,您只需使用正则表达式即可找到该词。假设您将其存储在名为myVar的变量中。然后你可以使用下面的代码: sentence.replace(myVar,'+ myVar +');所以你的最终目标是让你的句子像:sentence = "There are "+__total+" planets in the solar system";
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript