Перевод строки из camelCase в Camel Case на JavaScript

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Если вам необходимо преобразовать camelCase в Camel Case, используйте для этого следующий код на JavaScript:

JS
Скопировать код
const toTitleCase = str => str
    .replace(/(.)([A-Z])/g, '$1 $2')
    .replace(/^./, str => str.toUpperCase());

console.log(toTitleCase('camelCase')); // Вернёт: Camel Case. Просто и изящно!

Здесь мы применили метод replace с регулярными выражениями для вставки пробела перед каждой заглавной буквой, а также сделали первую букву строки заглавной. Это довольно прямолинейное решение, не правда ли?

Кинга Идем в IT: пошаговый план для смены профессии

Учет особых случаев

Иногда могут возникать особые случаи, такие как 'CSVFiles' или 'loadXMLHttpRequest', и наш код должен корректно с ними справляться:

JS
Скопировать код
const toTitleCase = str => str
    .replace(/(^.|[A-Z]+)([^A-Z]?)/g, (match, p1, p2) => `${p1} ${p2}`.trim())
    .replace(/^./, str => str.toUpperCase());

console.log(toTitleCase('CSVFiles'));      // Вернёт: CSV Files. Аббревиатура отделена.
console.log(toTitleCase('loadXMLHttpRequest')); // Вернёт: Load XML Http Request. Текст стал более понятным, не так ли?

Разгадка «магии»

Здесь мы используем мощное регулярное выражение, которое работает как швейцарский нож: оно учитывает как последовательности заглавных букв ([A-Z]+), так и сбрасывает лишние пробелы между словами. Благодаря этому в тексте сохраняются оригинальные аббревиатуры и инициалы.

Визуализация

Воспользуемся аналогией: каждая станция (🚉) на пути "Верблюжьего Поезда" соответствует началу нового слова или заглавной букве:

Markdown
Скопировать код
"camelCase" 🚂: [🚉c, amel, 🚉C, ase]

Затем мы вставляем пробел после каждой станции:

Markdown
Скопировать код
// Теперь пассажиры могут ясно различить отдельные слова:
"camel Case"

Обобщение

Обработка специальных последовательностей

Для более продвинутых случаев, таких как 'parseURLAndRedirect', можно использовать функцию, которая успешно разделит строку:

JS
Скопировать код
const toComplexTitleCase = str => str
    .replace(/(^.|[A-Z][a-z]+)/g, ' $1')
    .replace(/ +/g, ' ')
    .trim()
    .replace(/^./, str => str.toUpperCase());

console.log(toComplexTitleCase('parseURLAndRedirect')); // Вернёт: Parse URL And Redirect. Текст стал удобнее для восприятия, не правда ли?

Использование Lodash для работы с "верблюдами"

Если стандартных возможностей JavaScript недостаточно, на помощь приходит библиотека Lodash с функцией startCase, которая без труда преобразует форматирование:

JS
Скопировать код
_.startCase('camelCaseString'); // Вернёт: Camel Case String

Или используйте компоновку методов для более эффективного решения:

JS
Скопировать код
const chainTitleCase = _.chain('anotherCamelCaseString')
    .camelCase()
    .startCase()
    .value();

console.log(chainTitleCase); // Вернёт: Another Camel Case String. Зачем усложнять, если можно решить задачу одной строкой?

Интерактивное преобразование

Если необходимо производить преобразование в режиме реального времени, достаточно будет использовать событие input:

JS
Скопировать код
document.querySelector('#input').addEventListener('input', (e) => {
    document.querySelector('#output').textContent = toComplexTitleCase(e.target.value);
    // Как здорово наблюдать за тем, как текст изменяется в реальном времени, не так ли?
});

Полезные материалы

  1. String.prototype.replace() – JavaScript | MDN — документация на метод .replace().
  2. Putting space in camel case string – Stack Overflow — обсуждения на Stack Overflow, как добавить пробелы в строку с camel case.
  3. regex101: build, test, and debug regex — инструмент для создания и тестирования регулярных выражений.
  4. Строки – JavaScript.Info — базовый урок по работе со строками в JavaScript.
  5. Регулярные выражения – JavaScript | MDN — руководство по использованию регулярных выражений для обработки строк.