Одно из отличий состоит в том, что положительный взгляд назад и вперед требует, чтобы те символы, которые искали, существовали, а отрицательный взгляд - нет.Например,
1 2
будет иметь 2 совпадения по
(?<!\S)\d(?!\S)
, но не совпадет по
(?<=\s)\d(?=\s)
https://regex101.com/r/tjYc1o/1
(?=\s)
требует, чтобы за цифрой следовал пробел, поэтому цифра не будет совпадать, если цифра находится в конце строки, но если вместо нее используется (?!\S)
, отрицательный прогноз будет pass ,потому что за цифрой в конце строки не следует непробельный символ.