Как совместить строку, не содержащую слова

Мне было интересно, как совместить строку, не содержащую определенное слово, используя Regex в стиле Python (просто используйте Regex, не включая функции Python)?

Пример:

PART ONE OVERVIEW 1 
Chapter 1 Introduction 3

Я хочу сопоставить строки, которые не содержат слова "ЧАСТЬ"?

Спасибо и приветствую!

Ответ 1

Это должно работать:

/^((?!PART).)*$/

Если вы только хотели исключить его из начала строки (я знаю, что вы этого не делаете, но просто FYI), вы можете использовать это:

/^(?!PART)/

Изменить (по запросу): Почему этот шаблон работает

Синтаксис (?!...) - это негативный взгляд, который мне всегда трудно объяснить. В основном это означает, что "все, что следует за этой точкой, не должно соответствовать регулярному выражению /PART/". Участок, который я связал, объясняет это намного лучше, чем я могу, но я попытаюсь сломать это:

^         #Start matching from the beginning of the string.    
(?!PART)  #This position must not be followed by the string "PART".
.         #Matches any character except line breaks (it will include those in single-line mode).
$         #Match all the way until the end of the string.

Идиома ((?!xxx).)*, вероятно, труднее всего понять. Как мы видели, (?!PART) смотрит на строку вперед и говорит, что все, что приходит дальше, не может соответствовать подшаблону /PART/. Итак, то, что мы делаем с ((?!xxx).)*, проходит через буквенную букву и применяет правило ко всем из них. Каждый символ может быть любым, но если вы возьмете этот символ и следующие несколько символов после него, вам лучше не получить слово PART.

Якоря ^ и $ должны требовать, чтобы правило применялось ко всей строке, от начала до конца. Без этих якорей любая часть строки, которая не начиналась с PART, была бы совпадением. Даже сам PART будет иметь в себе совпадения, потому что (например) буква A не сопровождается точной строкой PART.

Так как у нас есть ^ и $, если PART находится где угодно в строке, один из символов будет соответствовать (?=PART)., и общее совпадение не будет выполнено. Надеюсь, что это достаточно ясно, чтобы быть полезным.