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
global
flagi
/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 ( comma
lub 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*
.