Разделение при сохранении разделителей часто можно уменьшить до matchAll
. В этом случае /(?:'|\.\.|\S[^']+)/g
, кажется, делает работу на примере. Идея состоит в чередовании буквальных одинарных кавычек, двух буквенных периодов или любой последовательности вплоть до одной кавычки, которая начинается с не пробела.
const result = [..."'TEST' .. 'TEST2' ".matchAll(/(?:'|\.\.|\S[^']+)/g)].flat();
console.log(result);
Еще одна идея, которая может быть более надежной, даже если это не одноразовое регулярное выражение, заключается в использовании традиционного неумного паттерна "вещи между разделителями", такого как /'([^']+)'/g
, затем flatMap
, чтобы очистить массив результатов в соответствии с вашим форматом.
const s = "'TEST' .. 'TEST2' ";
const result = [...s.matchAll(/'([^']+)'/g)].flatMap(e =>
["'", e[1], "'", ".."]
).slice(0, -1);
console.log(result);