Welcher Code ist das? / ^ (\ d {4} | \ d {6}) $ /

8

Ich bin also extrem neu in der Javascript-Welt. Ich trainierte Codewars, die einen Pin analysieren mussten, um sicherzustellen, dass er nur Zahlen enthielt und entweder 4 oder 6 Zeichen enthielt. Ich schaute auf den cleversten Code und die Antwort war:

%Vor%

Ich habe noch nie zuvor das "/ ^ (\ d {4} | \ d {6}) $ /" -Bit gesehen. Könnte mir jemand sagen, wie das heißt, damit ich es selbst erforschen kann, oder mir eine Aufschlüsselung darüber geben, wie es funktioniert?

    
Tucker Beauchamp 21.12.2015, 04:42
quelle

3 Antworten

17

Es ist ein Literal für reguläre Ausdrücke , ähnlich wie return new RegExp('^(\d{4}|\d{6})$').test(pin) "Literal" Teil bedeutet, dass es ein Mittel zur Darstellung eines bestimmten Datentyps als String im Code ist - genau wie true und 'true' unterschiedlich sind, da der eine ein boolesches Literal und der andere ein String-Literal ist.

Genauer gesagt, bricht der Regex ^(\d{4}|\d{6})$ zu:

zusammen %Vor%

Also: '1234' , '123456' , usw. würden übereinstimmen. '123.00' , '12345' , 'abc123' , ' 1234' , ' 1234 ' würden nicht übereinstimmen.

Wie von einigen anderen in den Kommentaren zu Draco18s erwähnt, gibt es einige Nuancen, die man bei der Verwendung von Regex beachten sollte Literale in JS:

  • Für die Literalsyntax müssen Sie keine Sonderzeichen innerhalb des Regex-Musters erhalten. Wenn Sie den RegExp-Konstruktor verwenden, müssen Sie das Muster als Zeichenfolge darstellen, die wiederum ein Escaping erfordert. Beachten Sie die Unterschiede der \ zwischen den beiden Syntaxen.

  • Wenn Sie ein Regex-Literal verwenden, wird die Regex als Konstante behandelt, während die Verwendung von new RegExp() die Lebenszyklusverwaltung der Regex-Instanz Ihnen überlassen wird.

      

    Die Literalnotation ist kompiliert und impliziert eine konstante Regex, während die Konstruktorversion aus der Zeichenkette repariert wird, und so das Literal besser optimiert / zwischengespeichert wird. jsperf.com/regexp-literal-vs-constructor/4 Hinweis: Sie können im Prinzip den gleichen Effekt erzielen durch Zwischenspeichern des neuen Regex in einer Variablen, aber das literale wird im JIT-Schritt zwischengespeichert - user120242

    Mit anderen Worten, die Verwendung eines Regex-Literals kann mögliche Performance-Fallstricke vermeiden:

    Beispiel:

    %Vor%
STW 21.12.2015, 16:16
quelle
27

Es ist ein regulärer Ausdruck.

Ich neige dazu, Ссылка zu verwenden, wenn ich versuchen möchte, den Ausdruck zu finden, den ich brauche, es gibt auch Ссылка zum Erlernen von ihnen (neben anderen Ressourcen).

    
Draco18s 21.12.2015 04:43
quelle
14

Gute Referenz für Javascript RegExp
Ссылка

%Vor%

Ihr Beispiel testet auf eine 4-stellige oder 6-stellige Zeichenfolge

    
user120242 21.12.2015 04:49
quelle

Tags und Links