需要在Javascript中创建正则表达式来检查有效的条件字符串

use*_*078 6 javascript regex

我想在javascript中创建正则表达式,它将检查有效的条件字符串,如

-1 OR (1 AND 2) AND 1

-1 OR (1 AND 2)

-1 OR 2

-1 OR 1 OR 1

-1 AND 1 AND 1
Run Code Online (Sandbox Code Playgroud)

该字符串不应包含"AND"和"OR".例如 - 1 OR 2 AND 3无效.- 它应该是(1或2)和31或(2和3).

我尝试了以下正则表达式.它适用于大多数情况,但未能检查上述情况.

/^(\s*\(\d+\s(AND|OR)\s\d+\)|\s*\d+)((\s*(AND|OR)\s*)(\(\d+\s(AND|OR)\s\d+\)|\s*\d+))*$/
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮我解决上述问题.

pha*_*t0m 5

忘记正则表达式,他们不能这样做.

解析器发电机来救援

随着解析器生成器,你可以创建语法,既可以理解维护.

这是一个用于JavaScript 的解析器生成器,带有在线演示.

语法

根据我的理解,你不希望在AND和之间有任何隐含的优先级规则OR.

以下是它认为有效的示例:

-1 OR 2 OR (2 AND 2 AND (2 OR (6 AND -2 AND (6 OR 2) AND (6 OR 2)) OR 2 OR 2))
Run Code Online (Sandbox Code Playgroud)

目前,语法需要/支持

  • "无限"的筑巢
  • 带括号的显式优先级控制AND/OR
  • (多重)否定文字
  • 操作数和运算符之间的空格

语法可以很容易地被改变,以

  • 允许任意空格
  • 文字的可选否定而不是可能的多重否定
  • 否定任何子表达式

如果您想要更深入的解释或无法弄清楚如何根据自己的喜好进行调整,只需发表评论即可.

这是你的语法,只需将其粘贴到在线生成器中并单击即可Download parser.

start
  = formula

formula
 = ors
 / ands
 / literal
 / parens_formula

parens_formula
 = "(" formula ")"

ors
 = operand (whitespace "OR" whitespace  operand)+

ands
 =  operand (whitespace "AND" whitespace operand)+

whitespace
 = " "+

operand
 = literal
 / parens_formula

literal
 = integer
 / "-" literal

integer "integer"
  = digits:[0-9]+ { return parseInt(digits.join(""), 10); }
Run Code Online (Sandbox Code Playgroud)