首页 > 解决方案 > 如何匹配重复的布尔搜索字符串模式

问题描述

我正在尝试构建一个正则表达式来匹配布尔搜索的所有位。我能够接近,但最终跳过了一些比赛。这是我到目前为止所得到的。

要检查的字符串:

“foo AND bar OR baz AND 不管什么”

这是我到目前为止所得到的(我知道,我缺少一些字符,如引号、括号等):

(\w+)(?:.(AND|OR|NOT).(\w+))

目前的结果:

[
  "foo AND bar",
  "foo",
  "AND",
  "bar",
]
[
  "baz AND whatever",
  "baz",
  "AND",
  "whatever"
]

请注意,我缺少“bar AND baz”部分。通过在正则表达式的末尾添加一个 + ,它匹配整个字符串,但它似乎忽略了第一个单词组之后的一些捕获组,然后捕获最后一位(希望这是有道理的)。

期望的结果:

[
  "foo AND bar OR baz AND whatever",
  "foo",
  "AND",
  "bar",
  "OR",
  "baz",
  "AND",
  "whatever"
]

或者

[
  "foo AND bar",
  "foo"
  "AND"
  "bar"
]
[
  "bar OR baz",
  "bar",
  "OR",
  "baz"
]
[
  "baz AND whatever",
  "baz",
  "AND",
  "whatever"
]

我认为第一个期望的结果会更好。那么,我在这里缺少什么?我很确定我需要对捕获组#3 进行反向引用,但似乎无法使其正常工作。

标签: javascriptregex

解决方案


推荐阅读