"-> 'def'. Почему ???"
Ну, это вполне логично. Посмотрите на ваш паттерн: (?<!abc)\s*def
(?<!abc)
- Отрицательный взгляд назад для мест, которым не предшествует abc
, по-прежнему генерирует все, кроме одной позиции в вашей строке \s*
- ноль или более пробелов def
- буквально совпадающий def
Таким образом, возвращая def
как совпадение. Чтобы иметь больше смысла в этом, здесь небольшое представление позиций, которые все еще действительны после негативного взгляда сзади:
Как вы можете видеть, все еще 7 действительных позиций. И включение \s*
ни на что не влияет, поскольку *
означает ноль или более.
Поэтому сначала примените то, что объясняется здесь и затем примените шаблон что-то вроде: (?<!\bfunction\b\s)\w+\s*=\s*myFunction
, чтобы получить ваши совпадения. Хотя могут быть более аккуратные способы.