Регулярное выражение: «ИЛИ» возвращает две группы, «АНДОР» не возвращает никаких групп - PullRequest
0 голосов
/ 25 января 2019

Я ищу регулярное выражение, которое возвращает:

ввод: 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 голосов
/ 27 января 2019

Попробуйте это регулярное выражение:

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

Нажмите для демонстрации

Пояснение:

  • \b - граница слова
  • (?:AND|OR|NOT) - соответствует либо AND или OR, либо NOT
  • \b - граница слова
0 голосов
/ 25 января 2019

Это регулярное выражение, кажется, соответствует вашим потребностям точно так, как вы описали в своем посте,

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

Объяснение регулярного выражения:

  • \b(AND|NOT)\b - Этогарантирует, что первая группа соответствует либо AND, либо NOT как целое слово, следовательно, заключена в границы слов
  • (?: - начало необязательной необязательной группы
  • \s(OR)\s(NOT) -Сопоставляет пробел и литерал OR и помещает его в группу 2, затем снова сопоставляет пробел и литерал NOT и помещает его в группу 3
  • )? - группа без захвата закрыта и? делает эту группу необязательной.

Демо

Дайте мне знать, если это то, что вы искали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...