Wie zum Teufel gehe ich mit ihnen um?
Wie alles Neue:
10 Study
20 Practice
30 goto 10
Studie
Ich stelle fest, dass die meisten erfolgreichen Lehrer mit dem Unterrichten eines Fachs beginnen, indem sie zunächst ein wenig Hintergrundwissen zum Fach vermitteln. Es ist wichtig, einen Kontext dafür zu haben, was Sie lernen und vor allem, warum Sie es lernen.
Es ist alles String Matching
Reguläre Ausdrücke dienen dazu, Muster im Text abzugleichen. Es ist eine deklarative Sprache, die in zahlreiche andere Programmiersprachen integriert ist.
Ich möchte betonen, dass es sich um eine deklarative Sprache handelt. Reguläre Ausdrücke sind nützlich, um auszudrücken, welche Zeichenfolge abgeglichen werden soll, sie drücken jedoch in keiner Weise aus, wie das Programm den Abgleich durchführen soll. Aus diesem Grund ist es möglich, reguläre Ausdrücke sehr schnell und sehr langsam in derselben Programmiersprache zu verwenden, indem einfach ein anderer RegEx-Parser verwendet wird.
Der Grund für die Erstellung regulärer Ausdrücke ist der gleiche wie für die Erstellung der meisten Programmiersprachen: Programmierer mussten immer wieder dieselbe komplizierte Aufgabe ausführen und entschieden sich für eine einfachere Art, den Code zu schreiben.
Einige werden (und sollten) sich über meinen vorherigen Satz beklagen, indem sie etwas in der Art von:
RegEx macht ein Programm nicht einfacher.
das ist wahr
RegEx macht ein Programm nicht einfacher, RegEx vereinfacht das Schreiben des Programms. Sie müssen Ihre Tests noch gründlich durchführen, um sicherzustellen, dass alle korrekten Fälle korrekt zugeordnet sind, und alle inkorrekten Fälle nicht. Es ist wirklich schwer, "alle" zu testen, und bei komplizierten Mustern ist es wirklich schwer, "die meisten" zu testen. Im schlimmsten Fall sollten Sie immer noch "einige" Fälle testen.
Lassen Sie uns einige Beispiele einbeziehen. Ich habe mich obligatorisch für die RegEx-Engine von JavaScript entschieden, da ich sie problemlos live im Browser testen kann und bei der Verwendung von RegEx-Literalen kein String-Escape durchführen muss.
Wenn Sie einen normalen String-Abgleich durchführen, testen Sie einen String-Wert gegen einen anderen. Sie können von überall her kommen, aber am Ende müssen zwei Zeichenfolgen miteinander verglichen werden:
if ( 'foo' == 'bar' ) doSomething();
Dieses Beispiel ist zum Kotzen, weil es niemals etwas bewirken wird
if ( foo == 'bar' ) doSomething();
Viel besser; Jetzt wissen wir nicht im Voraus, ob etwas getan wird oder nicht. Wir können jetzt damit beginnen, Benutzereingaben zu akzeptieren:
if ( prompt( 'Say "bar" to do something.' ) == 'bar' ) doSomething();
Wunderbar, jetzt können Benutzer Eingaben machen bar
und etwas wird passieren, bis Sie Fehlerberichte von Benutzern erhalten, die sagen, dass "bar"
das nicht funktioniert, oder dass "BAR" nicht funktioniert, oder dass sie BRA
100-mal getippt haben und nie etwas passiert.
Wenn Sie die Rechtschreibfehler und zusätzlichen Zeichen ignorieren 'bar' != 'BAR'
und Programmierer überlegen, wo Zeichen falsch geschrieben sind.
Einfache Lösung, verwenden toLowerCase
. Das funktioniert wunderbar, aber was ist mit unseren Nutzern, die britisches Englisch anstelle von amerikanischem Englisch verwenden, wenn Sie übereinstimmen something == 'color'
? Jetzt musst du passen something == 'color' || somthing == 'colour'
.
Lange Rede, kurze, einfache Muster verwandeln sich sehr schnell in viele sich wiederholende Codes.
Das Farbbeispiel kann einfach angepasst werden mit:
/colou?r/.test( something )
Ein solides Verständnis der Grundlagen regulärer Ausdrücke kann die Zeit, die Sie für die Neuerfindung des Rads benötigen, erheblich verkürzen.
Wo soll ich studieren
Die meisten Sprachen, die reguläre Ausdrücke implementieren, verfügen über mindestens eine Ressource für die spezifische Syntax der Verwendung regulärer Ausdrücke in dieser Sprache. Eine für JavaScript finden Sie im MDN
Lies es.
alles davon.
dann lies es nochmal.
Das Erlernen nimmt Zeit in Anspruch und ist eine Investition: Eine Stunde für das Erlernen von RegEx spart jetzt eine Stunde für den nächsten String-Pattern-Abgleich und eine weitere Stunde für den nächsten.
Trainieren
Nachdem Sie alles über RegEx gelesen haben, werden Sie wahrscheinlich das meiste davon nicht verstehen. Das ist , weil du nicht wirklich tun , damit nichts.
Ich habe erwähnt, warum ich JS für dieses Beispiel gewählt habe. Ich fordere Sie dringend auf, damit in Ihrem Browser herumzuspielen. Es ist schnell und Sie können es direkt in Ihrer URL-Leiste tun.
JS bietet verschiedene und einfache Möglichkeiten zur Verwendung von RegEx:
string.match( regex )
regex.exec( string )
regex.test( string )
Beginnen Sie mit etwas Einfachem wie:
javascript:'color'.match(/colou?r/);
ist eine einfache Möglichkeit, Ihren Fuß in die Tür zu bekommen. Spielen Sie damit, brechen Sie es und sehen Sie, welche Übereinstimmungen vorhanden sind und welche nicht.
Wenn Sie nicht weiterkommen, fahren Sie fort 30
. Sie müssen lesen, um mehr zu lernen, aber Sie müssen üben, um wirklich zu verstehen, was Sie gelernt haben.