Ihr Problem mit diesem Abschnitt der Regex ist.
(#[A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})|([a-zA-Z]{1,20})
Mit der Art und Weise Sie sie und der Vorrang des OR-Operator gruppiert haben, wird es grundsätzlich als Fänger ausgewertet werden, wenn eine dieser beiden reguläre Ausdrücke erfüllt sind:
^\/color(set| update)? (#[A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})
([a-zA-Z]{1,20})$
Wegen der Zeichenfolge "/color set red "stimmt nicht mit der hexadezimalen Prüfung überein, bestimmt, dass die linke Seite falsch und nur die rechte wahr ist. Daher, warum es das Recht erfasst.
Ich schlage vor, Ihre Regex als dies neu zu schreiben. Auf diese Weise werden ein oder mehrere Leerzeichen und Tabulatorzeichen zwischen den einzelnen Argumenten in der Zeichenfolge berücksichtigt.
^\/color[ \t]*(set|update)?[ \t]+(\#[A-Fa-f0-9]{6}|[A-Fa-f0-9]{3}|[a-zA-Z]{1,20})$
Und Ihre Frage ist? – NathanOliver
@NathanOliver "Was ist mit der Gruppe passiert mit 'set'?" – danilabagroff
@NathanOliver die Operation ** set ** wird nicht im zweiten Beispiel erfasst, wo Farbnamen anstelle von Hex-Werten verwendet werden – mike