Вот способ сделать это без регулярного выражения, но вам понадобится массив для хранения результатов:
var a = []; // (scratch space)
Array.prototype.map.call("abxbcxccdxdddexeeeefxfffffxx", c => c.charCodeAt(0))
.forEach(n => a[n] ? a[n] += String.fromCharCode(n) : a[n] = String.fromCharCode(n));
console.log(a.join(''));
Outputs: "abbcccddddeeeeeffffffxxxxxxx"
И если вам это нужно по порядку, вы можете добавить m
, чтобы сохранитьотображение позиций:
var a = [], m = []; // (scratch space; m maps chars to indexes)
Array.prototype.map.call("abxbcxccdxdddexeeeefxfffffxx", c => c.charCodeAt(0))
.forEach(n => (!m[n]&&(m[n]=m.length), a[m[n]] ? a[m[n]] += String.fromCharCode(n) : a[m[n]] = String.fromCharCode(n)));
console.log(a.join(''));
Outputs: "abbxxxxxxxcccddddeeeeeffffff"