正则表达式:“ AND OR”返回两个组,“ ANDOR”不返回任何组

时间:2019-01-25 13:51:52

标签: regex

我正在寻找返回的正则表达式:

输入:AND OR NOT

预期输出:
group 0:"AND"
group 1:"OR"
group 2:"NOT"

输入:ANDOR NOT

预期输出:
group 0:"NOT"

简而言之,仅当用space分隔时,我的正则表达式才应返回包含逻辑表达式的组。

花了3个小时,问了4位同事,我仍然不知道该怎么做。

我的方法:

{ regex: /( AND )|( OR )|( NOT )/, token: "logical" }

它不起作用,因为对于AND NOT,我没有得到预期的结果。

{ regex: /(AND)|(OR)|(NOT)/, token: "logical" },

它不起作用,因为对于ANDNOT,我没有得到预期的结果。

{ regex: /(?:(AND)|(OR)|(NOT))/, token: "logical" },

它不起作用,因为对于ANDOR,我没有得到预期的结果。

请帮助:-)

2 个答案:

答案 0 :(得分:1)

此正则表达式似乎完全符合您在帖子中所描述的需求,

\b(AND|NOT)\b(?:\s(OR)\s(NOT))?

正则表达式说明:

  • \b(AND|NOT)\b-确保第一组匹配ANDNOT作为整个单词,因此被单词边界包围
  • (?:-开始非分组的可选组
  • \s(OR)\s(NOT)-匹配空白和文字OR并将其放入组2,然后再次匹配空白和文字NOT并将其放入组3
  • )?-非捕获组已关闭,并且?使该组成为可选组。

Demo

让我知道这是否是您想要的。

答案 1 :(得分:1)

尝试此正则表达式:

\b(?:AND|OR|NOT)\b

Click for Demo

说明:

  • \b-单词边界
  • (?:AND|OR|NOT)-匹配ANDORNOT
  • \b-单词边界