Javascript JS用变量内容替换字符串中的变量引用

Javascript JS用变量内容替换字符串中的变量引用,javascript,eval,Javascript,Eval,我想创建一个函数,它接受一个字符串参数,并用相应的变量值替换其中的变量引用(用旁边的%指定)。对于eval()函数的风险,我已经得到了足够的警告,但还没有找到替代方法。我不确定这个代码有多危险。如果这是一个问题,什么方法更安全 以下是我所拥有的: var a = 1; var b = 2; result = myFunction("a is %a%, b is %b%"); console.log(result); // return "a is 1, b is 2" function myF

我想创建一个函数,它接受一个字符串参数,并用相应的变量值替换其中的变量引用(用旁边的%指定)。对于eval()函数的风险,我已经得到了足够的警告,但还没有找到替代方法。我不确定这个代码有多危险。如果这是一个问题,什么方法更安全

以下是我所拥有的:

var a = 1;
var b = 2;
result = myFunction("a is %a%, b is %b%");
console.log(result); // return "a is 1, b is 2"

function myFunction(text) {
    // escape needed chars in text for regex
    text = text.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
    var regExp = /%.+?%/g,
        match;
    while (match = regExp.exec(text)) {
        rep = match[0].substr(1).slice(0, -1); // remove flanking %'s
        text = text.replace(match[0], eval(rep));
    }
    return text
}
根据MH Souza的建议,我认为这应该可行,但输出是:

%a% a
%b% b
a is a, b is b
var a=1;
var b=2;
结果=myFunction(“a为%a%,b为%b%”;
控制台日志(结果);
函数myFunction(文本){
//正则表达式文本中的转义neede字符
text=text.replace(/[\-\[\]\/\{\\\\\(\)\*\+\?\.\\\^\$\\\\\\\\;]/g,“\$&”);
变量regExp=/%.+?%/g,
匹配;
while(match=regExp.exec(text)){
var rep=match[0].substr(1).slice(0,-1);//删除侧面%
var rep=`${rep}`;
console.log(匹配[0],rep);
text=text.replace(匹配[0],rep);
}
返回文本

}
您可以通过使用来实现这一点

就你而言:

const a = 1;
const b = 2;
const result = `a is ${a}, b is ${b}`; // a is 1, b is 2
您只需要像这样编写字符串: `我的绳子`

要串联一个变量值,可以这样编写变量: ${myVariable}

因此,最终结果如下所示:

const myVariable = 'awesome';
const finalResult = `My string is ${myVariable}` // My string is awesome

您可以通过使用来实现这一点

就你而言:

const a = 1;
const b = 2;
const result = `a is ${a}, b is ${b}`; // a is 1, b is 2
您只需要像这样编写字符串: `我的绳子`

要串联一个变量值,可以这样编写变量: ${myVariable}

因此,最终结果如下所示:

const myVariable = 'awesome';
const finalResult = `My string is ${myVariable}` // My string is awesome

您是否有任何限制阻止您使用?除了以前从未使用过它们并且不知道如何实现之外,我没有任何限制。您是否有任何限制阻止您使用?除了以前从未使用过它们并且不知道如何实现之外,我没有任何限制。上面更新的代码,仍然无法像我预期的那样解析。代码已在上面更新,仍然无法像我预期的那样解析。