解析 javascript 中的数字比较字符串

parsing a number comparison string in javascript

所以我想知道是否有一种简单的方法可以解析包含数字比较的字符串。

例如我有一个包含这样的字符串的变量 str = "1>3";

现在我正在使用数学插件来使用 math.eval(str) ,其中 returns 是一个布尔值,但我觉得这是一个非常大的资源,仅用于简单比较。

我的脚本目前是这样的,我喜欢它的简单性,我只是讨厌为它使用这么大的资源。

if (math.eval(str) == true) {
    //do something
} else {
   // do something else
}

如有任何意见,我们将不胜感激。我先谢谢你了。

如果你需要友好的环境(非public,没有安全考虑)你可以使用常规eval来计算结果:

var result = eval("1>3");

请注意,eval 允许您 运行 任何代码,如果您让用户输入 "condition" 并计划将其用于本地计算机上个人计算器示例以外的任何内容 -使用适当的解析器来验证表达式并且不使用任意函数。

如果你有这么简单的表达方式,比如

 expression := number comparison_operator number
 comparison_operator := < | > | = | ..

那么为此写一个解析器也很简单

例如沿运算符拆分输入字符串,

"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
}

This lib 为表达式解析做了很多开箱即用的事情。