我有values
数组与布尔值:
values = [true, false, true];
如何使用logic
中声明的正则表达式确定逻辑:
logic = "0 AND (1 OR 2)";
结果应为true
。
为了更复杂,它应该了解其他运营商,例如||
(或),&&
(和),!
(不是)。
处理更复杂的逻辑......例如!(0 OR 1) && ( (5 && 3) OR !4) OR 2
。
答案 0 :(得分:0)
您可以将任何逻辑表达式扩展为disjunctive normal form,可以很容易地将其转换为正则表达式:
true
;如果为负数,则替换为false
;如果文字未显示,则替换为(true|false)
。|
分隔。例如,0 AND (1 OR 2)
变为(0 AND 1) OR (0 AND 2)
,它将成为(true true (true|false))|(true (true|false) true)
,与true false true
匹配。
请注意,仅仅评估表达式会更容易:
function match(values, expression) {
return eval(expression.replace(/[0-9]+/g, "values[$&]"));
}
示例:
match([true, false, true], "0 && (1 || 2)"); // => true
答案 1 :(得分:0)
我认为你应该使用表达式树。
http://en.wikipedia.org/wiki/Binary_expression_tree
然后,您需要解析表示表达式的字符串 构建这样一个树,然后当你有占位符的值 像0,1,2,3等你使用树并通过访问计算值 树的每个节点都按正确的顺序排列。
你应该对此进行更多研究。 这是经典的编程。
我希望我能正确理解你的问题。