Использование вида сзади, например: (?<=name)\s
будет работать очень хорошо.
Если вы используете sh, чтобы использовать прогнозирование, вы можете посмотреть в «is» и использовать положительный прогноз, то есть \s{1}(?=is)
, который ищет пробел, за которым сразу следует слово is. В этом случае это будет работать, но в более сложном случае это будет соответствовать каждому вхождению этого, что, скорее всего, не тот результат, который вы ищете.
В вашем примере вы ищете единственное вхождение пробела, которое не , за которым следует имя. Если вы используете такой инструмент, как regex101, вы обнаружите, что вы сопоставляете все одиночные вхождения пустого пробела. Если вы используете \s{1}(?!Jack)
, вы получите все вхождения кроме пробела перед словом Jack. Вот почему ваш пример не работает.