Kurze Antwort: Verwenden m = s.match(/[^ ,]/g);
Ihr RE funktioniert nicht wie erwartet, da die letzte Gruppe mit der letzten Übereinstimmung übereinstimmt (=
c
). Wenn Sie dies weglassen
{1,}$
, wird die zurückgegebene Übereinstimmung angezeigt
" a , b ", "a", "b"
. Kurz gesagt, Ihr RegExp gibt so viele Übereinstimmungen wie angegebene Gruppen zurück, es
sei denn, Sie verwenden ein
global
Flag
/g
. In diesem Fall enthält die zurückgegebene Liste Verweise auf alle übereinstimmenden Teilzeichenfolgen.
Verwenden Sie:
m = s.replace(/\s*(,|^|$)\s*/g, "$1");
Dieses Ersetzen ersetzt jedes Komma ( ,
), Anfang ( ^
) und Ende ( $
), umgeben von Leerzeichen, durch das ursprüngliche Zeichen ( comma
oder nichts).
Wenn Sie ein Array erhalten möchten, verwenden Sie:
m = s.replace(/^\s+|\s+$/g,"").split(/\s*,\s*/);
Dieser RE schneidet die Zeichenfolge ab (entfernt alle Leerzeichen am Anfang und Ende und teilt die Zeichenfolge dann durch <any whitespace>,<any whitespace>
. Beachten Sie, dass Leerzeichen auch Zeilenumbrüche und Tabulatoren enthalten. Wenn Sie nur Leerzeichen verwenden möchten, verwenden Sie
stattdessen ein Leerzeichen ( ) \s
.
{0,}
ist das gleiche wie*
.