Node.js:使用Math方法而不引用模块

时间:2019-06-19 11:06:13

标签: javascript node.js import require

在运行于Node.js的科学软件包中,我需要执行用户提供的数学表达式,例如“ sin(2 * PI * x)”。目前,它的实现方式类似于:

// from input: s = "1+Math.sin(2*Math.PI*x)";
...
// regexp to verify "s" doesn't contains dangerous characters as '";
...
val f = new Function( 'x', s );
...
f(12);

问题是用户必须键入Math.sin(3*x)而不是更简单的sin(3*x)。有什么办法可以跳过这个问题?

如果不可能,我将寻找一个“替换”调用,该调用从1+Math.sin(3*x)构造字符串1+sin(3*x)

1 个答案:

答案 0 :(得分:1)

您可以查看Math是否具有相同名称的属性,并将其替换为其他Math.

var string = "sin(3*x)+foo()+PI*Math.PI",
    result = string.replace(/[a-z][\d.a-z]*(?=\(|[^\da-z]|$)/ig, k => (k in Math ? 'Math.' : '') + k);

console.log(result);