Новая строка из старой
В прошлом уроке мы вырезали из строки куски и искали в ней слова. Теперь вернёмся к копировальному аппарату. У хорошего копира есть настройки: он может напечатать всё крупными буквами, обрезать пустые поля, разрезать лист на полоски или склеить полоски в один лист.
Такие методы нужны, когда текст пришёл «грязным». Пользователь ввёл имя с пробелами по краям, город набрал заглавными буквами, а список цветов прислал одной строкой через запятую. Давайте посмотрим на методы, которые приводят такой текст в порядок:
const raw = " Ann Lee ";
console.log(raw.trim().toLowerCase()); // ann lee
const parts = "red,green,blue".split(",");
console.log(parts, parts.length); // [ 'red', 'green', 'blue' ] 3
console.log(parts.join(" + ")); // red + green + blue
console.log("ab".repeat(3)); // abababКаждый из этих методов, как и slice, оставляет исходную строку прежней и возвращает новое значение. Разберём их по группам.
Регистр и пробелы
toUpperCase и toLowerCase
toUpperCase делает все буквы заглавными, а toLowerCase — строчными. Цифры, пробелы и знаки препинания остаются как были. Русские буквы методы тоже понимают: "Ёж".toUpperCase() даёт "ЁЖ".
trim
trim убирает пробелы и переносы строк в начале и в конце строки. Пробелы между словами остаются: из " Ann Lee " получается "Ann Lee".
Цепочка вызовов
Каждый из этих методов возвращает строку, поэтому у результата можно сразу вызвать следующий метод. Такая запись называется цепочкой вызовов. Запись raw.trim().toLowerCase() работает в два шага:
raw.trim()убирает пробелы по краям и даёт"Ann Lee"..toLowerCase()вызывается уже у этой новой строки и даёт"ann lee".
Поиск без учёта регистра
Поиск различает заглавные и строчные буквы. Чтобы регистр не мешал, обе строки сначала приводят к одному регистру, а потом сравнивают или ищут:
const title = "Hello World";
console.log(title.includes("world")); // false
console.log(title.toLowerCase().includes("world")); // true
console.log("ANN".toLowerCase() === "ann"); // trueПервая строка вывода — false: в заголовке слово написано с заглавной W. Во второй строке toLowerCase сначала делает из заголовка "hello world", и слово находится.
Разрезать и склеить
split
split режет строку по разделителю — подстроке, которую он ищет между частями. Результат — массив частей, а сам разделитель в части не попадает. У массива есть length — число его элементов.
Node.js печатает массив целиком, в квадратных скобках, а строки в нём — в одинарных кавычках.
Здесь аналогия с копиром неточна. Копир всегда печатает лист, а split отдаёт не строку, а массив из нескольких строк.
join
join — метод массива, он делает обратную работу. Он склеивает элементы в одну строку и вставляет между ними заданную строку: parts.join(" + ") даёт "red + green + blue".
repeat
repeat(n) возвращает строку, повторённую n раз: "ab".repeat(3) даёт "ababab".
Частая ошибка
Метод вызвали, но его результат никуда не сохранили:
const city = " Paris ";
city.trim(); // ✗
console.log(`[${city}]`);Программа печатает [ Paris ]: пробелы на месте. trim вернул новую строку "Paris", но её никто не взял, и она пропала. Сохраните результат: const clean = city.trim(); — тогда в clean будет "Paris".
Главное
toUpperCaseиtoLowerCaseменяют регистр,trimубирает пробелы по краям, а цепочка вызовов делает это за одну запись.- Чтобы искать или сравнивать без учёта регистра, обе строки сначала приводят к одному регистру.
splitрежет строку по разделителю в массив,joinсклеивает массив в строку,repeat(n)повторяет строкуnраз.- Методы не меняют исходную строку: результат нужно сохранить в переменную.
Подпишись, чтобы пройти курс
Курс бесплатный. Войди через Telegram и подпишись на канал — откроются все уроки.