Строки в JS неизменяемый тип данных, а значит все методы строк, которые подразумевают изменение строки могут лишь вернуть новую строку, но не изменить существующую.
А следовательно данная строка ничего не делает:
str.replace(/\s+/g, ' ').trim();
Нужно возвращать не исходную строку, а результат данной операции:
return str.replace(/\s+/g, ' ').trim();