Krótka odpowiedź: użyj m = s.match(/[^ ,]/g);
Twoje RE nie działa zgodnie z oczekiwaniami, ponieważ ostatnia grupa pasuje do ostatniego dopasowania (=
c). Jeśli pominiesz
{1,}$, zwrócone dopasowanie będzie
" a , b ", "a", "b". Krótko mówiąc, wyrażenie RegExp zwraca tyle dopasowań, co określone grupy,
chyba że użyjesz
globalflagi
/g. W tym przypadku zwrócona lista zawiera odwołania do wszystkich dopasowanych podciągów.
Aby osiągnąć swój efekt, użyj:
m = s.replace(/\s*(,|^|$)\s*/g, "$1");
To zastąpienie zastępuje każdy przecinek ( ,), początek ( ^) i koniec ( $), otoczony białą spacją, przez oryginalny znak ( commalub nic).
Jeśli chcesz uzyskać tablicę, użyj:
m = s.replace(/^\s+|\s+$/g,"").split(/\s*,\s*/);
To RE przycina ciąg (usuwa wszystkie białe znaki na początku i na końcu, a następnie dzieli ciąg przez <any whitespace>,<any whitespace>. Zwróć uwagę, że znaki odstępu obejmują również znaki nowej linii i tabulatory. Jeśli chcesz trzymać się tylko spacji, użyj spacji ( ) zamiast \s.
{0,}to to samo, co*.