Node.js: использовать математические методы без ссылки на модуль - PullRequest
0 голосов
/ 19 июня 2019

В научном пакете, работающем над 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).Есть ли способ пропустить эту проблему?

Если это невозможно, я буду искать вызов "replace", который создает строку 1+Math.sin(3*x) из 1+sin(3*x).

1 Ответ

1 голос
/ 19 июня 2019

Вы можете посмотреть, есть ли у 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);
...