Получить строку между двумя словами, которые ближе всего друг к другу - PullRequest
2 голосов
/ 05 апреля 2019

Допустим, у меня есть следующая строка:

"собака-кошка привет кот" собака собака-привет мир кошки "

и два слова" привет "и" мир ".

Я хочу получить строку, которая между этими словами и где два слова находятся ближе всего (с точки зрения количества слов между ними) друг к другу .В этом примере между этими двумя словами будут находиться следующие строки:

  1. "кошка-собака, привет, кошка"
  2. "кошка"

, так как "привет""и" мир "являются ближайшими во втором варианте, желаемый результат будет" кошка " в этом примере.

Как мне сделать это в regEx (во вкусе JS)?

Лучшее, что я мог придумать, это

(?<=hello\s+).*?(?=\s+world)

, но это дает мне только 1-й вариант, то есть "кошка собака собака привет кошка"

Ответы [ 2 ]

2 голосов
/ 05 апреля 2019

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

/\bhello\s+((?:(?!\bhello\b).)*?)\s+world\b/

Демонстрация RegEx

(?:(?!\bhello\b). соответствует персонажу, у которого нет мира hello на следующей позиции

1 голос
/ 05 апреля 2019

Вы можете использовать .*\bhello в начале вашего паттерна, чтобы жадно потреблять символы вплоть до последнего вхождения hello, так, чтобы вы хотели быть в группе захвата, без hello или * 1004.* внутри:

.*\bhello\s+(.*?)\s+world\b

Демо: https://regex101.com/r/FYZAdX/3

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