在javascript中解析一个数字比较字符串

parsing a number comparison string in javascript

本文关键字:一个 数字 比较 字符串 javascript      更新时间:2023-09-26

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

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

现在我使用math插件来使用math.eval(str),它返回一个布尔值,但我觉得这是一个非常大的资源,只是为了一个简单的比较。

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

if (math.eval(str) == true) {
    //do something
} else {
   // do something else
}
对于这件事的任何意见都将非常感谢。

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

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

请注意,eval允许您运行任何代码,如果您让用户输入"条件",并计划将其用于本地机器上的个人计算器样本之外的任何东西-使用适当的解析器验证表达式,而不是使用任意函数。

如果您有这样的简单表达式,如

 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
}

这个库为表达式解析做了很多开箱即用的事情。