Загадка загадка - PullRequest
       5

Загадка загадка

2 голосов
/ 21 ноября 2019

Мне нужна помощь, чтобы получить этот селектор с регулярным выражением

Обрабатываемая строка:

пример frase для этой головоломки Этот пример frase имеет переменную длину, но заканчивается на foobar

Ожидаемый результат:

пример frase имеет переменную длину, но заканчивается на foobar

Мне нужно отфильтровать в той же строке "головоломку"так что если он встречает «example frase», но следует «conundrum» перед «foobar», он не выбирает с самого начала, вместо того, чтобы правильно выбрать второй «example frase»

Вот мой самый близкий подход:

/ (пример frase). * (Foobar) /

В нем отсутствует отрицание "головоломки", но я не нашел хорошего способа сделать это,это, конечно, не сработало

/ (пример frase). (?! (головоломка)). (foobar) /

Ответы [ 2 ]

0 голосов
/ 21 ноября 2019

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

По сути, задача может быть сведена к следующему набору правил:

Найти весь текст, который:

  • начинается с "example frase": (\bexample frase\b) - это будет преднамеренно избегать совпадения с "example frases", "myexample frase" и т. Д. Путем подтверждения фразыграница с \b

  • оканчивается на "foobar": (\bfoobar\b) - это позволяет избежать преждевременного завершения выбора, например, на "foobarbaz"

  • не содержит слова "головоломка": (?!.*\bconundrum\b) - использует отрицательный взгляд вперед и определяет границу слова

Теперь, сложив все вместе, окончательное регулярное выражение выглядит следующим образом:

/(\bexample frase\b)(?!.*\bconundrum\b).*(\bfoobar\b)/
0 голосов
/ 21 ноября 2019

Вы можете использовать отрицательный прогноз:

/example frase(?!.+conundrum.+foobar).+/

Regex101 Link

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