Возможно, я упускаю что-то очевидное, но предыдущие ответы относятся не к содержимому CamelCase, а скорее к всем вхождениям заглавных букв.
В этом примере сохраняются непрерывные блоки заглавных букв и отделяется только заглавная буква, за которой не следует заглавная буква (то есть CamelCase).
"CamelCaseTestHTML".replace(/([^A-Z])([A-Z])/g, "$1 $2")
// Camel Case Test HTML