text.replace(/\s/g,' ')
заменяет любой пробел, перевод строки, вертикальную табуляцию, обычную табуляцию и пробел
.replace(/<\s*br\s*\/*\s*>/g,' ')
заменяет любые <br>, < br/ >, <br /> <br /> <br //>
(и т. Д.) На пробел
.replace(/\s{2,}/g,' ')
заменяет любой двойной или более пробел одним пробелом
.replace(/^\s|\s$/,'')
ltrim + rtrim (хотя из-за чередования, по производительности лучше разделить на отдельные ltrim и rtrims в зависимости от размера строки)
окончательный:
text = text.replace(/\s/g,' ').replace(/<\s*br\s*\/*\s*>/g,' ').replace(/\s{2,}/g,' ').replace(/^\s|\s$/,'');
Вы не можете сделать «один шаблон», потому что любой из первых двух может оставить два пробела подряд, когда они будут выполнены, поэтому вам всегда нужно иметь последнее предложение.