Методы строк
Любые текстовые данные в JavaScript считаются строками. Это примитивный тип, но язык позволяет работать с ним так, будто он является объектом. В том числе — использовать встроенные в JS методы строк.
Важно: при использовании методов создаётся новая строка, которая записывается в ту же переменную вместо старой строки.
Длина строки
-
chevron_rightlengthСвойство length содержит длину строки:
let browserType = 'mozilla'; browserType.length; // 7
Получить символ
-
chevron_right[pos], str.at(pos)Получить символ, который занимает позицию pos, можно с помощью квадратных скобок: [pos].
Также можно использовать метод str.at(pos). Его преимущество заключается в том, что он допускает отрицательную позицию. Если pos — отрицательное число, то отсчет ведётся от конца строки. Таким образом, .at(-1) означает последний символ, а .at(-2) – тот, что перед ним, и т.д.
let str = `Hello`; // получаем первый символ alert( str[0] ); // H alert( str.at(0) ); // H // получаем последний символ alert( str[str.length - 1] ); // o alert( str.at(-1) );
Изменить регистр
-
chevron_righttoLowerCaseПреобразует символы в строке в нижний регистр.
"Hello World".toLowerCase(); // "hello world"
-
chevron_righttoUpperCaseПреобразует символы в строке в верхний регистр.
"Hello World".toUpperCase(); // "HELLO WORLD"
Объединить строки
-
chevron_rightconcatОбъединяет две или более строки и возвращает одну строку.
"Hello".concat(" User"); // "Hello User" "Hello".concat(" U", "s", "e", "r"); // "Hello User"
Разделить строку на подстроки
-
chevron_rightsplitРазбивает строку в массив по указанному разделителю, которым может быть подстрока или регулярное выражение. Вторым параметром можно указать ограничитель.
// Получаем каждый символ "Hello World".split(""); // ["H", "e", "l", "l", "o", " ", "W", "o", "r", "l", "d"] // Получаем каждое слово из строки "Hello World".split(" "); //["Hello", "World"] // Устанавливаем ограничитель "Hello World".split(" ", 1); //["Hello"]
Повторить строку
-
chevron_rightrepeatПринимает в качестве параметра число и повторяет строку указанное количество раз.
"World ".repeat(3); // "World World World "
Найти подстроку
-
chevron_rightcharAtВозвращает символ по указанному индексу.
"Hello World".charAt(0); // "H"
-
chevron_rightincludesПроверяет, содержит ли строка указанную подстроку. Возвращает значение true или false. Вторым параметром можно указать позицию в строке, с которой следует начать поиск.
"Hello World".includes("World"); // true "Hello World".includes("Hello", 1); // false
-
chevron_rightindexOfОбъединяет две или более строки и возвращает одну строку.
"Hello World".indexOf("o"); // 4 "Hello World".indexOf("o", 5); // 7
-
chevron_rightlastIndexOfВозвращает индекс последнего найденного вхождения указанного значения. Поиск ведётся от конца к началу строки. Если совпадений нет, возвращает -1. Вторым параметром можно передать позицию, с которой следует начать поиск.
"Hello World".lastIndexOf("o"); // 7 "Hello World".lastIndexOf("o", 5); // 4
-
chevron_rightendsWithПроверяет, заканчивается ли строка символами, заданными первым параметром. Возвращает true или false. Есть второй необязательный параметр — ограничитель по диапазону поиска. По умолчанию он равен длине строки.
"Hello World".endsWith("World"); // true "Hello World".endsWith("World", 12); // false
-
chevron_rightstartsWithПроверяет, начинается ли строка с указанных символов. Возвращает true или false. Вторым параметром можно указать индекс, с которого следует начать проверку.
"Hello Tproger".startsWith("Hello"); // true "Hello Tproger".startsWith("Hello", 1); // false
-
chevron_rightsearchПроверяет, есть ли в строке указанное значение или регулярное выражение и возвращает индекс начала совпадения.
"hi, hello, hey".search("hello"); // 4
Извлечь подстроку
-
chevron_rightsliceИзвлекает часть строки и возвращает новую строку. Обязательный параметр — начало извлечения. Вторым параметром можно установить границу (по умолчанию — до конца строки).
"Методы строк на JS Cheatsheet".slice(16); // "JS Cheatsheet" "Методы строк на JS Cheatsheet".slice(16, 24); // "JS Cheat" // Отрицательные значения тоже работают "Методы строк на JS Cheatsheet".slice(-13); // "JS Cheatsheet" "Методы строк на JS Cheatsheet".slice(-13, -5); // "JS Cheat"
-
chevron_rightsubstringИзвлекает символы из строки между двумя указанными индексами. Второй индекс указывать не обязательно. В таком случае будут извлечены все символы от начала до конца строки. В отличие от slice, можно задавать start больше, чем end. Отрицательные значения не поддерживаются, они интерпретируются как 0.
"Методы строк на JS Cheatsheet".substring(5, 2); // "тод"
-
chevron_rightsubstrИзвлекает часть строки указанной длины. Первым параметром принимает стартовую позицию, вторым — длину. Значение первого параметра может быть отрицательным, тогда позиция определяется с конца строки.
"Методы строк на JS Cheatsheet".substr(7, 5); // "строк" "Методы строк на JS Cheatsheet".substr(-13, 2); // "JS"
Заменить подстроку
-
chevron_rightreplaceИщет в строке указанное значение или регулярное выражение и возвращает новую строку, в которой выполнена замена на второй параметр. Можно заменить найденные значения другой строкой или передать функцию для работы над совпадениями.
"hi, hello, hi".replace("hi", "hey"); // "hey, hello, hi" "hi, hello, hi".replace(/hi/g, "hey"); // "hey, hello, hey"
-
chevron_rightreplaceAllДаёт такой же результат, как метод replace() с глобальным флагом g. Заменяет все найденные совпадения другой строкой или переданной функцией.
"hi, hello, hi".replaceAll("hi", "hey"); // "hey, hello, hey"
Добавить символы в строку
-
chevron_rightpadEndДобавляет в конце отступы, пока строка не достигнет длины, заданной первым параметром. Вторым параметром можно указать другой символ вместо пробела.
"Hello World".padEnd(20, "*"); // "Hello World*********"
-
chevron_rightpadStartДобавляет в начале отступы, пока строка не достигнет длины, заданной первым параметром. Вторым параметром можно указать другой символ вместо пробела.
"Hello World".padStart(20, "*"); // "*********Hello World"
Удалить пробелы в строке
-
chevron_righttrimОбрезает пробелы с обоих концов строки.
" Hello World ".trim(); // "Hello World"
-
chevron_righttrimEndОбрезает пробелы в конце строки
" Hello World ".trimEnd(); // " Hello World"
-
chevron_righttrimStartОбрезает пробелы в начале строки
" Hello World ".trimStart(); // "Hello World "
Работа с Юникодом
-
chevron_rightcharCodeAtВозвращает числовое значение Юникода по указанному индексу. Обратите внимание: у букв в верхнем и нижнем регистрах разные коды.
"T".charCodeAt() // 84 "t".charCodeAt() // 116
-
chevron_rightfromCharCodeПреобразует числовые значения Юникода в читаемые символы.
String.fromCharCode(72, 101, 108, 108, 111); // "Hello"
Примечание: при работе с эмодзи, редкими математическими символами, иероглифами нужно помнить о суррогатных парах. Это символы, которые записываются двумя 16-битными словами. Длина таких строк — 2.
'?'.length; // 2, редкий китайский иероглиф
Суррогатные пары не учитывались при создании JS и методы строк charCodeAt / fromCharCode обрабатывают их некорректно. Правильно работают с суррогатными парами редкие методы String.fromCodePoint и str.codePointAt, которые появились в языке недавно.
Проверь себя!
-
editЗадача 1
-
editЗадача 2
Напишите функцию
checkSpam(str)
, возвращающуюtrue
, еслиstr
содержит 'viagra' или 'XXX', а иначеfalse
.Функция должна быть нечувствительна к регистру:
checkSpam('buy ViAgRA now') == true checkSpam('free xxxxx') == true checkSpam("innocent rabbit") == false
-
editЗадача 3
Создайте функцию
truncate(str, maxlength)
, которая проверяет длину строкиstr
и, если она превосходитmaxlength
, заменяет конецstr
на "…", так, чтобы её длина стала равнаmaxlength
. Результатом функции должна быть та же строка, если усечение не требуется, либо, если необходимо, усечённая строка. Например:truncate("Вот, что мне хотелось бы сказать на эту тему:", 20) = "Вот, что мне хотело…" truncate("Всем привет!", 20) = "Всем привет!"