Ich stieß auf diesen regulären Ausdruck im jQuery-Quellcode:
%Vor%Ich habe mich gefragt, warum es ziemlich kompliziert war. Besonders interessiert mich der Grund für den zweiten Teil:
%Vor%Ich habe etwas recherchiert, aber ich konnte nicht herausfinden, was dieser Teil des regulären Ausdrucks hinzufügt.
%Vor% Besonders macht das letzte ?
für mich keinen Sinn. Der ganze zweite Teil stimmt überein, ob es eine Teilkette gibt oder nicht, wie sie durch diesen zweiten Teil definiert ist. Mit etwas Versuch und Irrtum scheint der reguläre Ausdruck nicht von nur zu unterscheiden:
Könnte jemand etwas beleuchten, was der zweite Teil des regulären Ausdrucks tun soll? Was bedeutet es? Welche Zeichenfolge schlägt fehl, die /(mozilla)/
oder umgekehrt?
Die beiden Regexes stimmen mit den gleichen Strings überein, würden jedoch unterschiedliche Informationen in ihren Capturing-Gruppen speichern.
für die Zeichenfolge: mozilla asdf rv:sadf
Hinweis: Ich stelle jetzt fest, dass diese Antwort möglicherweise etwas außerhalb des Geltungsbereichs liegt. Ich werde es immer noch für weitere Informationen verlassen, aber wenn Sie denken, dass es zu weit außerhalb des Geltungsbereichs ist, kommentieren Sie einfach und ich werde es entfernen.
@ Arnaud hat Recht, es ist die Version zu bekommen. Hier ist der Code , in dem die Ausdrücke verwendet werden:
%Vor% Sie können sehen, dass die Funktion die Version zurückgibt, wenn sie gefunden wurde, und 0
, falls nicht. Dies kann für einige Browser erforderlich sein oder wird nur als zusätzliche Information für Entwickler bereitgestellt.
Die Funktion heißt hier :
%Vor%Zuerst möchte ich den Unterschied verdeutlichen zwischen:
%Vor%Der nicht-gierige Text wird mit der kleinsten möglichen Anzahl von Bytes verglichen (der Rest der Suchzeichenfolge), und der gierige wird am meisten übereinstimmen.
Gegeben die Zeichenfolge:
%Vor%Der Regex gibt sowohl 'mozilla' als auch 'abc' zurück. Aber wenn 'rv:' nicht existiert, gibt die Regex immer noch 'mozilla' zurück.
Die ([\w.]+)
innerhalb von (?:.*? rv:([\w.]+))
erfasst, also wurde diese Regex verwendet, um die Revisionsnummer in der Vergangenheit zu erhalten (es scheint jedoch, dass jquery nur überprüft, ob die Regex übereinstimmt).
(pat) ist ein Mustertrennzeichen zum Vergleichen eines vollständigen enthaltenen Musters. (?: pat) ist die Negation von oben, genauso wie die Zeichensatzklammer [^] die Negation von [] ist. In Javascript erfolgt die Negation mit ! . passt auf ein beliebiges Zeichen, * ist ein Quantifizierer von Übereinstimmungen und kann in neueren Regex-Engines auch als {0,} geschrieben werden (aber diese drei zusätzlichen Zeichen können wahrscheinlich zu einem früheren Tod Ihrer Tastatur führen!) ? Redundanter Übereinstimmungsquantifizierer: kann null oder einmal übereinstimmen rv: .... wörtliche rv
ein anderes Sub-Match, kann innerhalb der Parent-Übereinstimmung mit null oder einmal übereinstimmen ([\ w.] +))? [\ w.] ... Zeichensatz, mit entzogenem w "\ w": Jedes alphanumerische Zeichen, aka [a-zA-Z0-9_], gefolgt von einem Literalpunkt, und pro Übereinstimmungsquantifizierer +, kann eins oder mehrere vorkommen mal
Um die Bedeutung der Musterübereinstimmung zurückzuentwickeln: einfach von links nach rechts in einem Texteditor auswerten und die Buchstaben durch zufällige Literale ersetzen, die in den Sinn kommen und für die jeder Unterausdruck übereinstimmt. Dann machen Sie einen Schritt zurück und überlegen Sie, wofür die Regex vielleicht gewesen ist.
Tags und Links javascript jquery regex