Методы строк
Любые текстовые данные в 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) = "Всем привет!"