Was fügt dieser reguläre Ausdruck hinzu?

8

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:

%Vor%

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?

    
pimvdb 19.08.2011, 18:50
quelle

5 Antworten

4

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

%Vor%     
Jacob Eggers 19.08.2011, 19:02
quelle
2

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%     
Felix Kling 19.08.2011 19:12
quelle
2

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.

    
Doug Kress 19.08.2011 19:00
quelle
1

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).

    
arnaud576875 19.08.2011 18:56
quelle
0

(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.

    
Lorenz Lo Sauer 19.08.2011 19:04
quelle

Tags und Links