Методы для работы со строками
Для создания строк мы можем как напрямую присваивать переменной или константе строку:
const name = "Tom";
Для работы со строками предназначен объект String
, поэтому также можно использовать конструктор String
:
const name = new String("Tom");
Как правило, используется первый более краткий способ. В первом случае JavaScript при необходимости автоматически преобразует переменную примитивного типа в объект String
, объект имеет большой набор свойств и методов, с помощью которых мы можем манипулировать строками.
Длина строки
Свойство length
указывает на длину строки:
const hello = "привет мир";
console.log(`В строке "${hello}" ${hello.length} символов`); // В строке "привет мир" 10 символов
Повторение строки
Метод repeat()
позволяет создать строку путем многократного повторения другой строки. Количество повторов передается в качестве аргумента:
const hello = "hello ";
console.log(hello.repeat(3)); // hello hello hello
Поиск в строке
Для поиска в строке некоторой подстроки используются методы indexOf()
(индекс первого вхождения подстроки) и lastIndexOf()
(индекс последнего вхождения подстроки). Эти методы принимают два параметра:
- Подстроку, которую надо найти
- Необязательный параметр, который указывает с какого символа следует проводить поиск подстроки в строке
Оба этих метода возвращают индекс символа, с которого в строке начинается подстрока. Если подстрока не найдена, то возвращается число -1
:
const hello = "привет мир. пока мир";
const key = "мир";
const firstPos = hello.indexOf(key);
const lastPos = hello.lastIndexOf(key);
console.log("Первое вхождение: ", firstPos); // 7
console.log("Последнее вхождение: ", lastPos); // 17
Метод includes()
возвращает true
, если строка содержит определенную подстроку:
const hello = "привет мир. пока мир";
console.log(hello.includes("мир")); // true
console.log(hello.includes("миг")); // false
С помощью второго дополнительного параметра можно определить индекс, с которого будет начинаться поиск подстроки:
const hello = "привет мир. пока мир";
console.log(hello.includes("мир", 5)); // true
console.log(hello.includes("привет", 6)); // false
Выбор подстроки
Для того, чтобы вырезать из строки подстроку, применяются методы substring()
и slice()
.
Метод substring()
принимает два параметра:
- Индекс символа в строке начиная с которого надо проводить обрезку строки, обязательный параметр
- Индекс до которого надо обрезать строку, необязательный параметра - если он не указан, то обрезается вся остальная часть строки
const hello = "привет мир. пока мир";
const world = hello.substring(7, 10); // с 7-го по 10-й индекс
console.log(world); // мир
const bye = hello.substring(12); // c 12 индекса до конца строки
console.log(bye); // пока мир
Метод slice()
также позволяет получить из строки какую-то ее часть, она принимает два параметра:
- Индекс символа в строке начиная с которого надо проводить обрезку строки, обязательный параметр
- Индекс до которого надо обрезать строку, необязательный параметра - если он не указан, то обрезается вся остальная часть строки
const hello = "привет мир. пока мир";
const world = hello.slice(7, 10); // с 7-го по 10-й индекс
console.log(world); // мир
const bye = hello.slice(12); // c 12 индекса до конца строки
console.log(bye); // пока мир
Можно заметить, этот метод похож на метод substring()
, тем не менее между ними есть небольшие различие. Прежде всего в slice()
начальный индекс должен быть меньше чем конечный. В substring()
, если начальный индекс больше конечного, то они меняются местами - то есть substring(5, 1)
будет равноценно substring(1, 5)
:
const hello = "привет мир. пока мир";
const world1 = hello.slice(6, 0); //
console.log(world1); //
const world2 = hello.substring(6, 0); // аналогично hello.substring(0, 6)
console.log(world2); // привет
Другое отличие, slice()
позволяет использовать отрицательные индексы. Отрицательный индекс указывает на индекс символа относительно конца строки. substring()
отрицательные индексы не поддерживает:
const hello = "привет мир. пока мир";
const bye1 = hello.slice(-8, -4); // с 8-го индекса с конца до 4 индекса с конца
console.log(bye1);
const bye2 = hello.substring(-8, -4); // не работает
console.log(bye2);
Управление регистром
Для изменения регистра имеются методы toLowerCase()
для перевода в нижний регистр и toUpperCase()
для перевода в верхний регистр:
const hello = "Привет Том";
console.log(hello.toLowerCase()); // привет том
console.log(hello.toUpperCase()); // ПРИВЕТ ТОМ
Получение символа по индексу
Чтобы получить определенный символ в строке по индексу, можно применять методы charAt()
который возвращает сам символ и charCodeAt()
который возвращает числовой код символа. Оба этих метода в качестве параметра принимают индекс символа:
const hello = "Привет Том";
console.log(hello.charAt(2)); // и
console.log(hello.charCodeAt(2)); // 1080
Удаление пробелов
Для удаления начальных и концевых пробелов в стоке используется метод trim()
:
let hello = " Привет Том ";
const beforeLength = hello.length;
hello = hello.trim();
const afterLength = hello.length;
console.log("Длина строки до: ", beforeLength); // 15
console.log("Длина строки после: ", afterLength); // 10
Дополнительно есть ряд методов, которые удаляют пробелы с определенной стороны строки:
trimStart()
удаляет пробел с начала строкиtrimEnd()
удаляет пробел с конца строкиtrimLeft()
удаляет пробел с левой части строкиtrimRight()
удаляет пробел с правой части строки
Объединение строк
Метод concat()
объединяет две строки:
let hello = "Привет ";
let world = "мир";
hello = hello.concat(world);
console.log(hello); // Привет мир
Замена подстроки
Метод replace()
заменяет первое вхождение одной подстроки на другую:
let hello = "Добрый день";
hello = hello.replace("день", "вечер");
console.log(hello); // Добрый вечер
Первый параметр метода указывает, какую подстроку надо заменить, а второй параметр - на какую подстроку надо заменить. В то же время у этого метода есть одна особенность - он заменяет только первое вхождение подстроки:
let menu = "Завтрак: каша, чай. Обед: суп, чай. Ужин: салат, чай.";
menu = menu.replace("чай", "кофе");
console.log(menu); // Завтрак: каша, кофе. Обед: суп, чай. Ужин: салат, чай.
Метод replaceAll()
позволяет заменить все вхождения подстроки:
let menu = "Завтрак: каша, чай. Обед: суп, чай. Ужин: салат, чай.";
menu = menu.replaceAll("чай", "кофе");
console.log(menu); // Завтрак: каша, кофе. Обед: суп, кофе. Ужин: салат, кофе.
Разделение строки
Метод split()
разбивает строку на массив подстрок по определенному разделителю. В качестве разделителя используется строка, которая передается в метод. В данном случае строка разделяется по пробелу, то есть в итоге в массиве messageParts
окажется четыре элемента:
const message = "Сегодня была прекрасная погода";
const messageParts = message.split(" ");
console.log(messageParts); // ["Сегодня", "была", "прекрасная", "погода"]
Проверка начала и окончания строки
Метод startsWith()
возвращает true
, если строка начинается с определенной подстроки. Метод endsWith()
возвращает true
, если строка оканчивается на определенную подстроку.
const hello = "let me speak from my heart";
console.log(hello.startsWith("let")); // true
console.log(hello.startsWith("Let")); // false
console.log(hello.startsWith("lets")); // false
console.log(hello.endsWith("heart")); // true
console.log(hello.startsWith("bart")); // false
При этом играет роль регистр символов, из примера выше мы видим, что let
не эквивалентно Let
. Дополнительный второй параметр позволяет указать индекс startsWith
индекс с начала, для endsWith
индекс с конца строки, относительно которого будет производиться сравнение:
const hello = "let me speak from my heart";
console.log(hello.startsWith("me", 4)); // true, "me" - 4 индекс с начала строки
console.log(hello.startsWith("my", hello.length-8)); // true, "my" - 8 индекс с конца
Зполнение строки
Методы padStart()
и padEnd()
растянуть строку на определенное количество символов и заполнить строку слева и справа соответственно:
let hello = "hello".padStart(8); // " hello"
console.log(hello);
hello = "hello".padEnd(8); // "hello "
console.log(hello);
Вызов "hello".padStart(8)
будет рястягивать строку hello
на 8
символов. То есть изначально в строке hello
5 символов, значит к ней будет добавлено 3 символа. При чем они будут добавлено в начале строки. По умолчанию добавляемые символы представляют пробелы. Аналогично вызов "hello".padEnd(8)
растянет строку на 8 символов, но оставшие символы в виде пробелов будут добавлены в конец строки.
По умолчанию эти методы используют пробелы для заполнения, но в качестве второго параметра мы можем передать методам значение, которым надо дополнить строку:
let hello = "hello".padStart(17, "JavaScript, "); // "JavaScript, hello"
hello = "hello".padEnd(12, " Eugene"); // "hello Eugene"
Если добавляемое количество символов больше добавляемой строки, то добавляемая строка повторяется:
let hello = "123".padStart(6, "0"); // "000123"
hello = "123".padEnd(6, "0"); // "123000"