所以我想知道是否有一个简单的方法,我想,解析一个包含数字比较的字符串。
例如,我有一个包含这样的字符串的变量
str = "1>3";
现在我使用数学插件使用math.eval(str)返回一个布尔值,但我觉得这只是一个非常大的资源,只包含一个简单的比较。
我的剧本目前是这样的,我喜欢简单,我不喜欢使用这么大的资源。
if (math.eval(str) == true) {
//do something
} else {
// do something else
}
对此事的任何意见都将不胜感激。我提前谢谢你。
答案 0 :(得分:2)
如果您需要友好环境(非公开,无安全注意事项),您可以使用常规eval
来计算结果:
var result = eval("1>3");
请注意,eval
允许您运行任何代码,如果您让用户输入“条件”并计划将其用于本地计算机上的个人计算器示例之外的任何内容 - 请使用验证表达式的正确解析器并执行此操作不使用任意函数。
答案 1 :(得分:2)
如果你有这样简单的表达,比如
expression := number comparison_operator number
comparison_operator := < | > | = | ..
然后为此编写解析器也非常简单。
E.g。沿运算符分割输入字符串
"1>3" ->
op = ">" ->
split: ["1", "3"] ->
num1_str = "1", num2_str = "3"
将每个数字从其字符串表示转换为数字值。
num1 = 1, num2 = 3
然后应用比较运算符。
switch (op) {
case "<":
return num1 < num2;
case ">":
return num1 > num2;
case "=":
return num1 == num2;
// <=, >=, !=, ..
default:
// unknown operator
}
答案 2 :(得分:0)
This lib 为表达式解析做了很多开箱即用的事情。