let header=myWordDDam.
конвертировать над словом в output = "My Word DDam".
Пробовал использовать регулярное выражение
let output=header.replace(/^./, header[0].toUpperCase()).split(/(?=[A-Z])/).join(" ");
Но вывод "My Word D Dam" Застрял, если есть последовательный Uppercase. Если есть последовательный верхний регистр, он не должен добавлять пространство только в том случае, если между словом слова должен быть один верхний регистр
Часть .split(/(?=[AZ])/).join(" ")
соответствует всем местоположениям в строке, за которыми следуют заглавные буквы, и поэтому перед каждой из них добавляются пробелы.
Вы должны потреблять куски заглавных букв 1+ и добавлять пространство перед этими целыми кусками.
Таким образом, чтобы исправить ваш текущий подход, вы можете заменить .split(/(?=[AZ])/).join(" ")
.replace(/(?!^)[AZ]+/g,' $&')
.split(/(?=[AZ])/).join(" ")
с .replace(/(?!^)[AZ]+/g,' $&')
.
let header = "myWordDDam";
let output = header.replace(/^./, m => m.toUpperCase()).replace(/(?!^)[A-Z]+/g,' $&')
console.log(output);
подробности
.replace(/^./, m => m.toUpperCase())
- ^.
соответствует первому символу и преобразует его в верхний регистр.replace(/(?!^)[AZ]+/g,' $&')
- соответствует любому 1+ прописным буквам ASCII (с [AZ]+
) (не в начале строки - (?!^)
), а текст заменяется пробелом + всем совпадением ($&
).
const magicFunction = (input) => "My Word DDam"