用于处理操作的 JavaScript 库

标签 javascript parsing expression-evaluation

我的代码动态生成字符串/数字操作。该程序动态构建类似于以下内容的内容:

"My name " + "is " + "G-Man"
"Your age is " + "21"
"5" * "5"

我想输出这个:

My Name is G-Man
Your age is 21
25

我可以为此编写一个库,但我目前受到时间限制。如果有人知道可以执行类似于上面的方程的库 (int + int = int)、(string + int = string) 等?

最佳答案

我认为您可能只想使用 JavaScript 的内置 EVAL 函数。

var a = eval("5 + 5");
console.log(a); // >> 10

编辑哇,当我回答这个问题时,我几乎以机器人的速度得到了 2 票否决票 ~ 很奇怪,但 EVAL 可能正是你想要的。

var a = eval("'Your age is ' + '22'");
console.log(a); // >> Your age is 22 

编辑 2 这是对输入进行一些快速验证的起点,以确保没有任何顽皮的内容得到评估。

var test1 = [
"testing"
,"+"
,"123"
];
var test2 = [
"8"
,"*"
,"5"
,"/"
,"3"
];
var test3 = [
"window.alert('bad');"
];
var test4 = [
"\"It's hard to escape things\", said "
," + "
,"Bob"
];

function supereval(arr) {
    var sEval = '';
    for(var i=0; i<arr.length; i++) {
        if(!isNaN(parseFloat(arr[i])) && isFinite(arr[i])) { // number
            sEval += arr[i];
//console.log("> number");
        } else if( /^\s?[\+\/\*\-]\s?$/i.test(arr[i]) ) { // operation
            sEval += arr[i];
//console.log("> operation");
        } else { // string
            sEval += "\"" + arr[i].replace(/"/g, '\\"') + "\"";
//console.log("> string");
        }
    }
console.log("DEBUG:" + sEval);
    return eval(sEval);
}

console.log(supereval(test1));
console.log(supereval(test2));
console.log(supereval(test3));
console.log(supereval(test4));

关于用于处理操作的 JavaScript 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12696862/

相关文章:

javascript - 更改类后jquery继续选择元素

regex - 使用正则表达式进行日志解析

Python lxml HTML xpath 查询代码不起作用

c++ - double 和 oStringStream 的奇怪行为

javascript - JavaScript 中的短路评估 - SyntaxError : Unexpected token 'return'

javascript - 以下数组初始化语法实际上创建了什么?

javascript - 在?中使用多个条件:javascript中的语句

javascript - 如何在使用 d3.js 滚动时将 x 轴保持在固定位置?

java - 用于创建、解析和查询 XML 的最佳 Java 库

c# - 如何评估由字符串表示的数学表达式?