Строки

Строки, объект String и его методы

Последнее обновление: 26.10.2023

Для создания строк мы можем как напрямую присваивать переменной или константе строку:

const message = "Hello";

Для работы со строками предназначен объект String, поэтому также можно использовать конструктор String:

const message = new String("Hello");

Но как правило, используется первый более краткий способ. В первом случае JavaScript при необходимости автоматически преобразует переменную примитивного типа в объект String.

С помощью индексов можно обращаться к отдельным символам строки, как к элементам массива (как и в массивах индексация начинается с нуля):

const message = "Hello";
console.log(message[0]);    // H 
console.log(message[4]);    // o

Объект String имеет большой набор свойств и методов, с помощью которых мы можем манипулировать строками.

Длина строки

Свойство length указывает на длину строки:

const message = "Hello";
console.log(message.length);        //  5 символов

Повторение строки

Метод repeat() позволяет создать строку путем многократного повторения другой строки. Количество повторов передается в качестве аргумента:

const message = "hello ";
console.log(message.repeat(3));	// hello hello hello

Поиск в строке

indexOf/lastIndexOf

Для поиска в строке некоторой подстроки используются методы indexOf() (индекс первого вхождения подстроки) и lastIndexOf() (индекс последнего вхождения подстроки). Эти методы принимают два параметра:

indexOf(str, index)
lastIndexOf(str, index)
  • Подстроку, которую надо найти

  • Индекс, с которого идет поиск (Необязательный параметр)

Оба этих метода возвращают индекс символа, с которого в строке начинается подстрока. Если подстрока не найдена, то возвращается число -1.

const hello = "привет мир. пока мир";
const key = "мир";
const firstPos = hello.indexOf(key);
const lastPos = hello.lastIndexOf(key);
console.log("Первое вхождение: ", firstPos);	// 7
console.log("Последнее вхождение: ", lastPos);	// 17

Применим поиск относительно индекса, например, начиная с индекса 10:

const hello = "привет мир. пока мир";
const key = "мир";
const firstPos = hello.indexOf(key, 10);    // поиск с 10-го индекса
console.log("Первое вхождение: ", firstPos);	// 17

Следует учитывать, что поиск регистрозависимый:

const hello = "привет мир. пока мир";
const key = "Мир";
const firstPos = hello.indexOf(key);
console.log(firstPos);	// -1

includes

Еще один метод - 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

Метод substring() принимает два параметра:

substring(startIndex, endIndex)
  • индекс символа в строке, начиная с которого надо проводить обрезку строки. Обязательный параметр

  • индекс, до которого надо обрезать строку. Необязательный параметра - если он не указан, то обрезается вся остальная часть строки

const hello = "привет мир. пока мир";
const world = hello.substring(7, 10); // с 7-го по 10-й индекс
console.log(world); // мир
const bye = hello.substring(12);	// c 12 индекса до конца строки
console.log(bye); // пока мир

slice

Метод slice также позволяет получить из строки какую-то ее часть. Она принимает два параметра:

slice(startIndex, endIndex)
  • Начальный индекс подстроки в строке. Обязательный параметр

  • Конечный индекс подстроки в строке. Необязательный параметра - если он не указан, то обрезается вся остальная часть строки

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); // 

substr

Следует отметить, что еще есть метод substr(). Этот метод не является частью стандарта и в целом не рекомендуется к использованию, однако он все еще может поддерживаться браузерами, и его до сих пор можно встретить в различных программах. Он принимает два параметра:

substr(startIndex, count)
  • Начальный индекс подстроки в строке. Обязательный параметр

  • Количество выбираемых символов. Необязательный параметра - если он не указан, то выбирается вся остальная часть строки

Применение:

const hello = "привет мир. пока мир";
const world = hello.substr(7, 3); // с 7-го индекса 3 символа
console.log(world); // мир
const bye = hello.substr(12); // с 12-го индекса до конца
console.log(bye); // пока мир

Управление регистром символов

Для изменения регистра символов имеются методы toLowerCase() (для перевода в нижний регистр) и toUpperCase() (для перевода в верхний регистр).

const hello = "Привет Том";
console.log(hello.toLowerCase()); // привет том
console.log(hello.toUpperCase()); // ПРИВЕТ ТОМ

Получение символа по индексу

Чтобы получить определенный символ в строке по индексу, можно применять синтаксис массивов. Но также JavaScript предоставляет методы charAt() и charCodeAt(). Оба этих метода в качестве параметра принимают индекс символа:

const hello = "Привет Том";
console.log(hello.charAt(2)); 		// и
console.log(hello.charCodeAt(2)); 	// 1080

Но если в качестве результата метод charAt() возвращает сам символ, то метод charCodeAt() возвращает числовой код этого символа.

Удаление пробелов

Для удаления начальных и концевых пробелов в стоке используется метод 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 = "Привет ";
const 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() разбивает строку на массив подстрок по определенному разделителю. В качестве разделителя используется строка, которая передается в метод:

const message = "Сегодня была прекрасная погода";
const messageParts = message.split(" ");
console.log(messageParts);	// ["Сегодня", "была", "прекрасная", "погода"]

В данном случае строка разделяется по проблему, то есть в итоге в массиве 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"
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850