我的问题是拆分包含逻辑运算符的字符串。
例如,这是我的示例字符串:

var rule = "device2.temperature > 20 || device2.humidity>68 && device3.temperature >10"

我需要以一种可以轻松地操作逻辑的方式来解析该字符串,并且我不确定哪种方法会更好。

PS:请记住,这些规则字符串可以具有10个或更多不同的条件组合,例如4个AND和6个OR。

最佳答案

假设没有括号,我可能会使用以下内容(JavaScript代码):

function f(v,op,w){
  var ops = {
    '>': function(a,b){ return a > b; },
    '<': function(a,b){ return a < b; },
    '||': function(a,b){ return a || b; },
    '&&': function(a,b){ return a && b; },
     '==': function(a,b){ return a == b;}
  }

  if (ops[op]){
    return ops[op](v,w);
  } else alert('Could not recognize the operator, "' + op + '".');
}

现在,如果您可以设法获取表达式列表,则可以按顺序评估它们:
var exps = [[6,'>',7],'||',[12,'<',22], '&&', [5,'==',5]];

var i = 0,
    result = typeof exps[i] == 'object' ? f(exps[i][0],exps[i][1],exps[i][2]) : exps[i];

i++;

while (exps[i] !== undefined){
  var op = exps[i++],
      b = typeof exps[i] == 'object' ? f(exps[i][0],exps[i][1],exps[i][2]) : exps[i];

  result = f(result,op,b);
  i++;
}

console.log(result);

09-13 12:51