2016-08-05 35 views
1

Ich versuche, alle */bin/* in der Lösung außer Ordnern in einem Knoten_Modules zu ignorieren. Also:Wie ignoriere ich alle bin-Ordner mit Ausnahme von Einträgen in node_modules in Mercurial?

Das glob prasseln behandelt das nicht, also versuche ich, mit einer richtigen Regex zu kommen.

ich kam mit:

.*?\/bin\/(?<!node_modules).* 

Aber etwas ist, dass immer noch falsch. Ich möchte eine beliebige Zeichenfolge übereinstimmen enthält/bin /, aber nicht, wenn es eine node_modules irgendwo vor/bin/

+0

„nicht außer Acht gelassen“ bedeutet, es sollte keinen Regex sein? Versuchen Sie '^ (?!. * \/Node_modules \ /). * \/Bin \ /.*' dann. –

Antwort

1

Wahrscheinlich kann man nicht eine unendliche Weite, die Sie verwenden Lookbehind Brauchen Sie hier, wenn Sie Ihre Logik verwenden.

Ich schlage vor, einen Look-Ahead am Anfang mit:

^(?!.*\/node_modules(?=\/).*\/bin\/).*\/bin\/.* 
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 

Vorgriff prüft, ob es 0+ Zeichen andere als eine neue Zeile so viele wie möglich bis zum letzten /node_modules, die mit \ folgten, und dann wieder 0+ Zeichen außer einem Newline so viele wie möglich bis zum letzten /bin/ (Hinweis: die letzte \/ kann durch (?:$|\/) ersetzt werden, um die / am Ende des Strings zu überprüfen). Dieser Lookahead schlägt grundsätzlich fehl, wenn eine /node_modules/ vor einer /bin/ vorliegt.

Die .*\/bin\/.* entspricht einer Zeile, die /bin/ enthält.

Siehe regex demo

+0

Ich denke, dass Sie hinzufügen müssen. * Bevor Sie negativ beginnen schauen .. –

+0

Wow! Das hat wirklich funktioniert! Ich habe am Anfang ein (? I) hinzugefügt, um den Fall – Eiver

+0

zu ignorieren. Ja, ein Inline '(? I)' Modifier schaltet die Suche nach Groß- und Kleinschreibung ein. –

0

Sie benötigen, um Ihre negativen Lookbehind (?<!..) zu Beginn Ihrer regex

negativen Lookbehind setzen: Sorgt dass das angegebene Muster nicht mit der aktuellen Position im Ausdruck übereinstimmt und endet. Zeichnet keine Zeichen.

mit /(?<!not)foo/

diese nicht überein: not foo

dieses Spiel: but foo

versuchen, etwas wie folgt aus:

(?<!node_modules).*?(?<!node_modules)\/bin\/(?<!node_modules).*