用于处理操作的JavaScript库

用于处理操作的JavaScript库,javascript,parsing,expression-evaluation,Javascript,Parsing,Expression Evaluation,我的代码动态生成字符串/数字操作。该程序动态构建类似于以下内容的内容: "My name " + "is " + "G-Man" "Your age is " + "21" "5" * "5" 我想输出以下内容: 我的名字是G-Man 你的年龄是21岁 25 我可以为此编写一个库,但我目前时间有限。如果有人知道一个库可以执行与上面类似的等式(int+int=int),(string+int=string),等等?我想您可能只想使用JavaScript的内置EVAL函数 var a = eva

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

"My name " + "is " + "G-Man"
"Your age is " + "21"
"5" * "5"
我想输出以下内容:

我的名字是G-Man
你的年龄是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));
var test1=[
“测试”
,"+"
,"123"
];
var test2=[
"8"
,"*"
,"5"
,"/"
,"3"
];
var test3=[
“window.alert('bad');”
];
var test4=[
“很难逃避事情”,他说
," + "
“鲍勃”
];
功能超评估(arr){
var sEval=“”;
对于(var i=0;i字符串”);
}
}
日志(“调试:+sEval”);
返回评估(sEval);
}
console.log(supereval(test1));
console.log(supereval(test2));
console.log(supereval(test3));
console.log(supereval(test4));

你真的想要
“5”*“5”
输出
10
?哎呀…刚刚修复了…最初我放了5+5,但改为乘法不能解析int()和parseFloat()已经在做你需要的事情了吗?它要复杂得多…人们可以有很长的方程…如果我没有遇到类似的库,我可能会写一个,但为了节省时间,而不是重新发明轮子,我希望有什么东西可以实现这一点…@Pathachiever11-请添加一个例子,其中eval(…)不起作用,因此我们可以更好地了解您的后续内容的深度。我确实研究了这一点,但它对字符串不起作用……但我没有投票否决您,因为这是我第一次尝试的……。@Pathachiever11-我添加的示例显示它对字符串也起作用。我不得不同意,当涉及到字符串时,
eval
是最佳选择“在飞行中”计算东西,但我建议至少在它前面放一个守卫,只列出标识符、数字和运算符。尽量减少可能的注入可执行代码。我不是一个下意识的eval是邪恶的机器人,但可能最好谨慎使用它,并说明为什么在给定情况下使用它是正确的。罪ce听起来字符串似乎来自用户输入(?),只是盲目地评估它可能不是最好的方法。@Jeremy J Starcher-如果您允许用户输入任何内容,肯定需要进行一些验证。我已经用一个简单的评估包装器更新了答案,该包装器接受数组输入并进行一些额外的合理性检查。