我的问题是拆分包含逻辑运算符的字符串。
例如,这是我的示例字符串:
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);