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

标签 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

字符串不应包含“AND”和“OR”。 例如 - 1 OR 2 AND 3 无效。 - 它应该是(1 OR 2) AND 31 or (2 AND 3)

我尝试了以下正则表达式。它适用于大多数条件,但无法检查上述条件。

/^(\s*\(\d+\s(AND|OR)\s\d+\)|\s*\d+)((\s*(AND|OR)\s*)(\(\d+\s(AND|OR)\s\d+\)|\s*\d+))*$/

谁能帮我解决上面的问题。

最佳答案

忘掉正则表达式吧,他们做不到。

解析器生成器来拯救

使用解析器生成器,您可以创建既可理解可维护的语法。

这是一个 parser generator 的 JavaScript 和一个在线演示。

语法

据我了解,您不希望在 ANDOR 之间有任何隐式优先规则。

这是它认为有效的示例:

-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))

目前,语法需要/支持

  • “无限”嵌套
  • AND/OR带括号的显式优先级控制
  • (多个)文字的否定
  • 操作数和运算符之间的空格

语法可以很容易更改

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

如果您想要更深入的解释或无法弄清楚如何根据自己的喜好对其进行调整,请发表评论。

这是您的语法,只需将其粘贴到 online generator 并单击下载解析器

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); }

关于javascript - 需要在 Javascript 中创建正则表达式来检查有效的条件字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13208282/

相关文章:

javascript - 在 Controller 之间传递id值

javascript - RegExp问题的条件表达式

javascript - 如何在codeigniter中做数据表?

c# - 试图为美国各州提出正则表达式(缩写和全名混合在一起)

javascript - 如何使用正则表达式获取此处的日期?

javascript - JS中枚举当前作用域的所有属性

javascript - 与 .svg 图像交互

java - 无效的正则表达式 : illegal repetition in Java

javascript - 正则表达式检测<>内的文本

python - 捕获组和环视