Первая часть (?<!\..)
- негативный взгляд.Он определяет шаблон, который делает недействительным совпадение.В этом случае он ищет двух персонажей - первый - точку, а другой - любой персонаж.
Вторая часть - это стандартный захват / группа, которая может быть лучше выражена: ([?!.])
(вам не нужны экранированные символы в скобках класса), то есть окончание предложениясимвол пунктуации.
Следующая часть - это одиночный ( ?? ) символ пробела: \s
И последняя частьнегативный прогноз: (?!.\.)
.Опять же, он защищает от случая одного символа, за которым следует точка.
Это должно работать, относительно хорошо.Но я не думаю, что рекомендую это.Я не понимаю, к чему стремился кодер, пытаясь убедиться, что просто точка не была вторым самым последним персонажем или что он не был вторым.
Я имею в виду, если вы хотите разбить на пунктуацию терминалов, почему бы вам не принять меры против того, чтобы один и тот же класс был впереди или сзади?Вместо этого он полагается на периоды, которых там нет.Таким образом, более регулярное выражение будет:
/(?<![?!.].)([?!.])\s(?!.[?!.])/