Краткий ответ: используйте m = s.match(/[^ ,]/g);
Ваш RE не работает должным образом, потому что последняя группа соответствует самому последнему совпадению (=
c). Если вы опустите
{1,}$, будет возвращено совпадение
" a , b ", "a", "b". Короче говоря, ваш RegExp возвращает столько совпадений, сколько указанные группы,
если вы не используете
globalфлаг
/g . В этом случае возвращаемый список содержит ссылки на все совпавшие подстроки.
Для достижения эффекта используйте:
m = s.replace(/\s*(,|^|$)\s*/g, "$1");
Эта замена заменяет каждую запятую ( ,), начало ( ^) и конец ( $), окруженные пробелом, на исходный символ ( commaили ничего).
Если вы хотите получить массив, используйте:
m = s.replace(/^\s+|\s+$/g,"").split(/\s*,\s*/);
Этот RE обрезает строку (удаляет все пробелы в начале и в конце, затем разбивает строку на <any whitespace>,<any whitespace>. Обратите внимание, что символы пробела также включают символы новой строки и табуляции. Если вы хотите придерживаться только пробелов, используйте пробел ( ) вместо \s.
{0,}это то же самое, что и*.