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?
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:
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% Gute Referenz für Javascript RegExp
Ссылка
Ihr Beispiel testet auf eine 4-stellige oder 6-stellige Zeichenfolge
Tags und Links javascript regex