Ich habe einen regulären Ausdruck, die mehr oder weniger wie diese genutzt werden:Warum Javascript String Match enthält undefined
'(801) 555-1234'.match(/^(1[-. ]?)?\(?[0-9]{3}\)?[-. ]?[0-9]{3}[-. ]?[0-9]{4}$/)
Aus irgendeinem Grund diese gibt
["(801) 555-1234", undefined]
Wenn ich die globale Flag auf den regulären Ausdruck hinzufügen (zB ...{4}$/g
), der nicht definierten Wert fällt ab und ich bekomme
["(801) 555-1234"]
ich würde es vorziehen, nicht die g-Flag i zu verwenden, f es ist nicht notwendig (was es mir scheint, ist es nicht, da die Regex mit^beginnt und mit $ endet).
P.S. Ignoriere die Qualität der Regex, um passende Telefonnummern zu finden. Es ist vielleicht nicht ideal, aber es ist von Code, den ich behalte. Meistens interessiert mich das^... $ und das Vorhandensein/Fehlen der Flagge und der undefinierte Wert.
Warum erscheint undefined
und warum macht die Flagge den Unterschied?
Ah! das macht jetzt total Sinn. Die Array-Elemente spiegeln alle einfangenden Gruppen wider (ob sie optional waren oder nicht). Da die erste Gruppe keine Übereinstimmung gefunden hat, ist der Wert dieser Übereinstimmung nicht definiert. Macht jetzt Sinn, wenn Sie es sagen. Beim Betrachten des MDN-Beispiels sehe ich, dass das Array sowohl Übereinstimmungen für die Regex als auch Übereinstimmungen mit einfangenden Gruppen enthält. Vielen Dank. – jinglesthula