确定正则表达式中的逻辑

时间:2013-11-23 22:48:41

标签: javascript regex

我有values数组与布尔值:

values = [true, false, true];

如何使用logic中声明的正则表达式确定逻辑:

logic = "0 AND (1 OR 2)";

结果应为true

为了更复杂,它应该了解其他运营商,例如||(或),&&(和),!(不是)。

处理更复杂的逻辑......例如!(0 OR 1) && ( (5 && 3) OR !4) OR 2

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等你使用树并通过访问计算值 树的每个节点都按正确的顺序排列。

你应该对此进行更多研究。 这是经典的编程。

我希望我能正确理解你的问题。