Перейти к содержимому
Теория · Строки · урок 7 из 12

Новая строка из старой

В прошлом уроке мы вырезали из строки куски и искали в ней слова. Теперь вернёмся к копировальному аппарату. У хорошего копира есть настройки: он может напечатать всё крупными буквами, обрезать пустые поля, разрезать лист на полоски или склеить полоски в один лист.

Такие методы нужны, когда текст пришёл «грязным». Пользователь ввёл имя с пробелами по краям, город набрал заглавными буквами, а список цветов прислал одной строкой через запятую. Давайте посмотрим на методы, которые приводят такой текст в порядок:

JavaScript
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() работает в два шага:

  1. raw.trim() убирает пробелы по краям и даёт "Ann Lee".
  2. .toLowerCase() вызывается уже у этой новой строки и даёт "ann lee".

Поиск без учёта регистра

Поиск различает заглавные и строчные буквы. Чтобы регистр не мешал, обе строки сначала приводят к одному регистру, а потом сравнивают или ищут:

JavaScript
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".

Частая ошибка

Метод вызвали, но его результат никуда не сохранили:

JavaScript
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 и подпишись на канал — откроются все уроки.

Войти другим способом