Ваше регулярное выражение соответствует только первой части, потому что вы используете якорь ^
, чтобы утверждать начало строки и не повторяете то, что вы уже нашли.
Вы можете использовать свое регулярное выражение и добавить (?:,\1)*
в конец, чтобы повторить то, что вы уже захватили, используя обратную ссылку. Вы также можете убрать якорь ^
из группы и поставить его в начале.
^([\t ]+[^,\s]+)(?:,\1)*
Regex demo
Вы можете разделить запятую и обрезать элементы в полученном массиве:
const str = " something, something, something, something, something shouldignore";
let res = str.match(/^([\t ]+[^,\s]+)(?:,\1)*/)[0]
.split(',')
.map(x => x.trim());
console.log(res);
Если после shouldignore
может возникнуть еще один something
, вы можете разбить на необязательную запятую, за которой следуют 1+ пробельные символы ,?\s+
, и отфильтровать те, которые не совпадают с первым элементом в возвращенном массиве. из сплита:
const str = " something, something, something, something, something shouldignore something";
let res = str.trim()
.split(/,?\s+/)
.filter((x, _, a) => x === a[0]);
console.log(res);