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

标签 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 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;
result = myFunction("a is %a%, b is %b%");
console.log(result);

function myFunction(text) {
  // escape neede chars in text for regex
  text = text.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
  var regExp = /%.+?%/g,
    match;
  while (match = regExp.exec(text)) {
    var rep = match[0].substr(1).slice(0, -1); // remove flanking %'s
    var rep = `${rep}`;
    console.log(match[0], rep);
    text = text.replace(match[0], rep);
  }
  return text
}

最佳答案

您可以通过使用 Template Literals 来实现此目的.

就您而言:

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

关于javascript - JS 用变量内容替换字符串中的变量引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46993520/

相关文章:

perl - 不确定我是否正确使用了 Perl 的 Try::Tiny

javascript - 如何在React中实现GET方法getById?

javascript - 何时使用 useState() 钩子(Hook)的功能更新形式,例如。集合X(x=>x+1)

javascript - 在不同文件中拆分文件(例如 html、图像、css、js 等)时,HTML 和 CSS 是否应保留在同一域中

javascript - Jquery/Javascript 附加不运行

perl - Perl 的 $@ 在 eval 之后会被取消定义吗?

javascript - 如何防止上下文菜单显示在 Chrome 的设备 View 中

jQuery 的 getScript - 将文件包含到主范围中?

javascript - eval() 会减慢其他代码的速度,为什么?

Tensorflow 对象检测 API eval.py - 分配前引用了 'metrics'