Как изменить регистр текста в JS — JavaScript

В JS предусмотрено два метода для работы с регистром:

  1. Преобразование в верхний регистр: String.prototype.toUpperCase()
    почитать
  2. Преобразование в нижний регистр: String.prototype.toLowerCase()
    почитать

Применяются они к строке:

JavaScript
let str = "Да ЗДРавСтвуЕТ свЕТ!"

console.log(str.toUpperCase()); // 'ДА ЗДРАВСТВУЕТ СВЕТ!'
console.log(str.toLowerCase()); // 'да здравствует свет!'

Со стандартными методами все понятно.

Как в JS сделать так, чтобы первая буква каждого слова была заглавная?

Изначально такой метод не предусмотрен.

Давай напишем свою функцию:

JavaScript
function formatTitle(str) {
  // В переменную words получаем массив из слов
  let words = str.toLowerCase() // Приведем всю строку к нижнему регистру
                 .split(" "); // И разделим все слова по пробелу
                   
  let result = ""; // Сюда будем записывать результат

  words.forEach(word => { // Проходим по массиву words циклом
    if (word) { // если элемент массива !undefined
      let a = word.split("")[0] // разделяем слово по символам и берем первый символ
                  .toUpperCase() // конвертируем в верхний регистр
      let b = word.slice(1) // вторая часть слова (без первой буквы)
      result += a + b + " "; // в результат объединяем первую большую букву со второй частью слова
    }
  })
  
  return result.trim(); // возвращаем результат и убираем лишний пробел в конце
}

// Используем функцию
let str = "Да ЗДРавСтвуЕТ свЕТ!";
console.log(formatTitle(str)); // 'Да Здравствует Свет!'

При работе я столкнулся с проблемой: если в строке есть перенос текста — функция неправильно обрабатывает ее.

JavaScript
let str = `
Да ЗДРавСтвуЕТ свЕТ!
Да ЗДРавСтвуЕТ свЕТ!
`;

console.log(formatTitle(str)); // 'да Здравствует Свет!
                               //  да Здравствует Свет!'

Я пришел к тому, что нужно дописать её с учетом наличия переносов строк. Для этого потребуется нашу строку для начала разделить на ряды, а потом уже бегая циклом по каждому ряду производить манипуляции со словами в ряду.

JavaScript
function formatTitle(str) {
    let rows = str.toLowerCase().split("\n"); // Получаем массив строк разделяя переносом \n

    let result = "";

    rows.forEach(function (row) { // Проходим по массиву rows циклом
      let words = row.split(" "); // Получаем массив слов из строки разделяя пробелом
      let wordsResult = "";
      words.forEach(function (word) { // Проходим по массиву words циклом
        word ? (wordsResult += " " + word.split("")[0].toUpperCase() + word.slice(1)) : "";
      });

      result += wordsResult.trim() + "\n";
    });

    return result;
}

// Ура!
let str = `
Да ЗДРавСтвуЕТ свЕТ!
Да ЗДРавСтвуЕТ свЕТ!
`;

console.log(formatTitle(str)); // 'Да Здравствует Свет!
                               //  Да Здравствует Свет!'

Как сделать инверсию регистра в JS?

Суть инверсии регистра в том, чтобы из ааАА получилось ААаа.

Решение:

JavaScript
function formatInverse(str) {
  let result = ""; // Сюда записываем результат
  let char = ""; // Вспомогательная переменная для символа
  for (var i = 0; i < str.length; i++) { // Проходим по строке str циклом
    char = str.charAt(i); // Символ записываем в переменную
    if (char.toLowerCase() === char) { // Если символ в нижнем регистре
      char = char.toUpperCase(); // Конвертируем в верхний регистр
    } else if (char.toUpperCase() === char) { // Если символ в верхнем регистре
      char = char.toLowerCase(); // Конвертируем в нижний регистр
    }
    result += char; // В результат записываем символ с уже инвертированным регистром
  }
  return result;
}

// Ура!
let str = "aaAAaa";

console.log(formatInverse(str)); // 'AAaaAA'

Изменяем регистр как в предложениях: каждое предложение с заглавной буквы с помощью JavaScript

Здесь не обойтись без регулярных выражений.

В данном случае регулярное выражение ищет все символы которые идут после знаков «.», «!», «?» и «\n».

JavaScript
function formatSentence(str) {
  return str.toLowerCase().replace(/((^\s*\D|[\.\!\?\n]\s*\D))/g, function (c) {
    return c.toUpperCase();
  });
}

//Пример
let str = `Да, ЗДРавСтвуЕТ свЕТ? Да ЗДРавСтвуЕТ свЕТ! Да ЗДРавСтвуЕТ свЕТ.`;

console.log(formatSentence(str)); // 'Да, здравствует свет? Да здравствует свет! Да здравствует свет.'