Регулярное выражение дает не ожидаемый результат
По задумке регулярное выражение /[\s][\wА-Яа-яЁё]{1,2}[\s]/gm должно находить одно или два символа, обрамленных пробелом или переводом строки. Но в результате в выборку попадает не все. Буду благодарен за помощь!
https://regex101.com/r/Ic0hVy/1
Ответы (1 шт):
У вас в тексте есть совпадения, которые идут один за другим. Первый пробельный символ каждого последующего совпадения находится с помощью последнего \s.
Вам нужно использовать проверку на наличие символа, блок предварительного просмотра:
\s[\wА-Яа-яЁё]{1,2}(?!\S)
или
(?<!\S)[\wА-Яа-яЁё]{1,2}(?!\S)
См. этот пример работы выражения или этот.
(?!\S) - блок предварительного просмотра вперёд, требует наличия пробельного символа или конца строки сразу после текущей позиции. (?<!\S) - блок предварительного просмотра назад, требует наличия пробельного символа или начала строки сразу после текущей позиции (пока не поддерживается в FireFox и IE/Edge).