Коротка відповідь: Використовуйте 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,}- те саме, що*.