Можно захватывать с краев любое количество пробелов (если они будут), а в конце еще и символы ".,?!", то есть знаки препинания любые возможные, а в функции проверять если ли такие в найденном, если есть, значит возвращать этот знак, иначе пробел. А вначале ставить пробел если это не первое найденное (по позиции).
var str = '____ you wanted to know,___________________ giving a good advice______, and getting him to return the ___.';
str = str.replace(/\s*_+\s*[\.\?!,]?/g, (v, i) => (i ? ' ' : '') + '[space]' + ((v = v.match(/[\.\?!,]{1}/)) ? v : ' '))
console.log(str)
Можно добавить любые символы, можно убрать ненужные, я не знаю, что в этих текстах можно ожидать.