Cela devrait fonctionner:
/^((?!PART).)*$/
Si vous ne voulait l'exclure du début de la ligne (je sais que vous ne le faites pas, mais juste pour info), vous pouvez utiliser ceci:
/^(?!PART)/
Edit (par demande): Pourquoi ce modèle fonctionne
L' (?!...)
syntaxe est une anticipation négatif, que j'ai toujours trouvé difficile à expliquer, mais, fondamentalement, cela signifie "tout ce qui suit ce point ne doit pas correspondre à l'expression régulière /PART/
." Le site que j'ai lié explique bien mieux que je peux, mais je vais essayer de briser ce bas:
^ #Start matching from the beginning of the string.
(?!PART) #This position must not be followed by the string "PART".
. #Matches any character except a line break (\n or \r). There are ways to make it match those as well.
$ #Match all the way until the end of the string.
L' ((?!xxx).)*
idiome est probablement le plus difficile à comprendre. Comme nous l'avons vu, (?!PART)
regarde la chaîne d'avance et dit que tout ce qui s'en vient ne peut pas correspondre à la parenthèse /PART/
. Donc, ce que nous faisons avec l' ((?!xxx).)*
est en passant par la chaîne de lettre par lettre et à l'application de la règle à tous. Chaque personnage peut être rien, mais si vous prenez le personnage et les quelques caractères après cela, vous feriez mieux de ne pas obtenir le mot de la PARTIE.
L' ^
et $
ancres sont là pour exiger que la règle s'applique à l'ensemble de la chaîne, du début à la fin. Sans ces ancrages, n'importe quel morceau de la chaîne qui ne commence pas avec la PARTIE allait être un match. Même PARTIE lui-même aurait des correspondances dans les, parce que (par exemple) la lettre A n'est pas suivie par la chaîne de caractères exacte de la PARTIE.
Puisque nous avons ^
et $
, si la PARTIE ont été n'importe où dans la chaîne, l'un des personnages correspondent (?=PART).
et l'ensemble du match serait un échec. J'espère que c'est suffisamment clair pour être utile.