Einfache RegEx-Tricks für Anfänger

Wollten Sie schon immer reguläre Ausdrücke lernen, wurden aber von ihrer Komplexität abgeschreckt? In diesem Artikel zeige ich Ihnen fünf leicht zu erlernende RegEx-Tricks, die Sie sofort in Ihrem bevorzugten Texteditor verwenden können.

Einrichtung des Texteditors

Während fast jeder Texteditor jetzt reguläre Ausdrücke unterstützt, werde ich Visual Studio Code für dieses Tutorial verwenden, aber Sie können jeden beliebigen Editor verwenden. Beachten Sie außerdem, dass Sie RegEx normalerweise irgendwo in der Nähe der Sucheingabe aktivieren müssen. So machen Sie das in VS Code:

1) . - Entspricht einem beliebigen Charakter

Fangen wir einfach an. Das Punktsymbol .entspricht einem beliebigen Zeichen:

b.t

Oberhalb RegEx Streichhölzer "bot”, "bat”und andere Wort aus drei Zeichen , die mit beginnt bund endet t. Wenn Sie jedoch nach dem Punktsymbol suchen möchten, müssen Sie es mit \maskieren, damit dieser RegEx nur dem genauen Text entspricht "b.t":

b\.t

2). * - Alles zusammenpassen

Hier .bedeutet „ ein beliebiges Zeichen“ und *Mittel „etwas vor diesem Symbol beliebig oft wiederholt werden .“ Zusammen ( .*) bedeuten sie "jedes Symbol beliebig oft". Sie können es beispielsweise verwenden, um Übereinstimmungen zu finden, die mit einem Text beginnen oder mit diesem enden. Nehmen wir an, wir haben eine Javascript-Methode mit der folgenden Signatur:

loadScript(scriptName: string, pathToFile: string)

Und wir wollen alle Aufrufe dieser Methode finden, die pathToFileauf eine beliebige Datei im Ordner verweisen “lua”. Sie können hierfür den folgenden regulären Ausdruck verwenden:

loadScript.*lua

Was bedeutet: "Ordnen Sie den gesamten Text ab, “loadScript”gefolgt von etwas bis zum letzten Auftreten von “lua”"

3) ? - Nicht gieriges Match

Das ?Symbol nach .*und einige andere RegEx-Sequenzen bedeuten "so wenig wie möglich übereinstimmen". Wenn Sie sich das vorherige Bild ansehen, werden Sie sehen, dass der Text “lua”in jeder Übereinstimmung zweimal angezeigt wird und alles bis zur Sekunde “lua”übereinstimmt. Wenn Sie "lua"stattdessen alles bis zum ersten Auftreten von abgleichen möchten, verwenden Sie das folgende RegEx:

loadScript.*?lua

Was bedeutet: "Alles abgleichen, beginnend mit, "loadScript"gefolgt von irgendetwas bis zum ersten Auftreten von "lua""

4) () $ - Gruppen und Rückreferenzen erfassen

Okay, jetzt können wir einen Text abgleichen. Aber was ist, wenn wir Teile des gefundenen Textes ändern wollen? Dafür müssen wir oft Capture-Gruppen verwenden.

Nehmen wir an, wir haben unsere loadScriptMethode geändert und jetzt muss plötzlich ein weiteres Argument zwischen die beiden Argumente eingefügt werden. Nennen wir dieses neue Argument id, daher sollte die neue Funktionssignatur folgendermaßen aussehen : loadScript(scriptName, id, pathToFile). Wir können hier die normale Ersetzungsfunktion unseres Texteditors nicht verwenden, aber ein regulärer Ausdruck ist genau das, was wir brauchen.

Oben sehen Sie das Ergebnis der Ausführung des folgenden regulären Ausdrucks:

loadScript\(.*?,.*?\)

Was bedeutet: "Ordne alles zu, beginnend mit, "loadScript("gefolgt von irgendetwas bis zum ersten ,, gefolgt von irgendetwas bis zum ersten )"

Die einzigen Dinge, die Ihnen hier seltsam erscheinen könnten, sind die \Symbole. Sie werden verwendet, um Klammern zu entkommen.

Wir müssen Symbole umgehen (und )weil es sich um Sonderzeichen handelt, die von RegEx verwendet werden, um Teile des übereinstimmenden Textes zu erfassen. Aber wir müssen die tatsächlichen Klammerzeichen abgleichen.

In der vorherigen RegEx haben wir zwei Argumente unseres Methodenaufrufs mit den .*?Symbolen definiert. Machen wir jedes unserer Argumente zu einer separaten Erfassungsgruppe, indem wir Symbole hinzufügen (und )um sie herum:

loadScript\((.*?),(.*?)\)

Wenn Sie diese RegEx ausführen, werden Sie feststellen, dass sich nichts geändert hat. Dies liegt daran, dass es mit demselben Text übereinstimmt. Aber jetzt können wir uns auf das erste Argument als $1und auf das zweite Argument als beziehen $2. Dies wird als Rückreferenz bezeichnet und hilft uns dabei, das zu tun, was wir wollen: Fügen Sie mitten im Aufruf ein weiteres Argument hinzu:

Sucheingabe:

loadScript\((.*?),(.*?)\)

Dies bedeutet dasselbe wie das vorherige RegEx, ordnet jedoch Argumente zu, um die Gruppen 1 bzw. 2 zu erfassen.

Eingang ersetzen:

loadScript($1,id,$2)

Dies bedeutet, dass „jeder übereinstimmende Text durch Text ersetzt wird, “loadScript(“gefolgt von Erfassungsgruppe 1 “id”, Erfassungsgruppe 2 und )“. Beachten Sie, dass Sie keine Klammern in der Ersetzungseingabe maskieren müssen.

5) [] - Zeichenklassen

Sie können Zeichen aufzulisten , die Sie an einer bestimmten Position durch Platzierung übereinstimmen soll [und ]Symbole , um diese Zeichen. Beispielsweise [0-9]stimmt die Klasse mit allen Ziffern von 0 bis 9 überein. Sie können auch alle Ziffern explizit auflisten: [0123456789]- Die Bedeutung ist dieselbe. Sie können auch Bindestrich mit Buchstaben verwenden, [a-z]der mit jedem lateinischen Kleinbuchstaben [A-Z]übereinstimmt, mit jedem lateinischen Großbuchstaben [a-zA-Z]übereinstimmt und mit beiden übereinstimmt.

Sie können auch *nach einer Zeichenklasse wie nach verwenden ., was in diesem Fall bedeutet: "Eine beliebige Anzahl von Vorkommen der Zeichen in dieser Klasse abgleichen".

Letztes Wort

Sie sollten wissen, dass es mehrere RegEx-Varianten gibt. Die hier diskutierte ist die Javascript RegEx Engine. Die meisten modernen Motoren sind ähnlich, es kann jedoch einige Unterschiede geben. Normalerweise umfassen diese Unterschiede Escapezeichen und Rückreferenzmarkierungen.

Ich fordere Sie dringend auf, Ihren Texteditor zu öffnen und einige dieser Tricks sofort anzuwenden. Sie werden sehen, dass Sie jetzt viele Refactoring-Aufgaben viel schneller als zuvor ausführen können. Sobald Sie mit diesen Tricks vertraut sind, können Sie sich eingehender mit regulären Ausdrücken befassen.

Vielen Dank, dass Sie meinen Artikel bis zum Ende gelesen haben. Fügen Sie Klatschen hinzu, wenn Sie es nützlich fanden, und abonnieren Sie weitere Updates. Ich werde weitere Artikel über reguläre Ausdrücke, Javascript und Programmierung im Allgemeinen veröffentlichen.