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
globalFlag
/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 ( commaoder 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*.