Строки, возможно, являются одним из самых важных типов данных в программировании. Они есть почти в каждом языке программирования более высокого уровня, и возможность эффективной работы с ними имеет основополагающее значение для разработчиков при создании полезных программ.
Строки JavaScript всегда отставали от аналогичных функций других языков. Например, только в ECMAScript 5 строки наконец получили метод trim()
, а ECMAScript 6 продолжает расширять возможности JavaScript для анализа строк с новыми функциями.
Функции проверки строк или подстроки
До ECMAScript 6 мы традиционно использовали метод inedxOf()
для идентификации строк внутри других строк.
ECMAScript 6 включает следующие три метода, предназначенные именно для этого:
includes()
— методincludes()
возвращает true, если заданный текст находится в любом месте строки. Если он не найден, он возвращает false.startsWith()
— методstartsWith()
возвращает true, если заданный текст находится в начале строки. Если он не найден, он возвращает false.endsWith()
— методendsWith()
возвращает true, если заданный текст находится в конце строки. Если он не найден, он возвращает false.
Каждый метод принимает два аргумента: текст для поиска и необязательный индекс, с которого начинается поиск.
Когда указан второй аргумент, includes()
и startsWith()
начинают поиск с этого индекса, а endsWith()
начинают поиск с длины строки за вычетом второго аргумента; когда второй аргумент опущен, includes()
и startsWith()
ищут с начала строки, а endsWith()
начинают с конца. По сути, второй аргумент минимизирует объем искомой строки.
var
msg
=
"Hello world!";
console.log(msg.startsWith("Hello"));
// true
console.log(msg.endsWith("!"));
// true
console.log(msg.includes("o"));
// true
console.log(msg.startsWith("o"));
// false
console.log(msg.endsWith("d!"));
// true
console.log(msg.includes("z"));
// false
console.log(msg.startsWith("o",
4));
// true
console.log(msg.endsWith("o",
8));
// true
console.log(msg.includes("o",
8));
// false
Вот JSBIN для того же:
https://jsbin.com/jatekiw/edit?html,консоль
Первые шесть вызовов не включают второй параметр, поэтому при необходимости они будут искать всю строку. Последние три вызова проверяют только часть строки.
Вызов msg.startsWith("o", 4)
запускает сопоставление, просматривая индекс 4 строки msg
, который является «o» в «Hello».
Вызов msg.endsWith("o", 8)
также начинает поиск по индексу 4, потому что аргумент 8
вычитается из длины строки (12).
Вызов msg.includes("o", 8)
начинает поиск с индекса 8, который является «r» в «world».
Хотя эти три метода упрощают определение наличия подстрок, каждый из них возвращает только логическое значение. Если вам нужно найти фактическое положение одной строки в другой, используйте методы indexOf()
или lastIndexOf()
.
Методы
startsWith()
,endsWith()
иincludes()
вызовут ошибку, если вы передадите регулярное выражение вместо строки.
Это отличается от
indexOf()
иlastIndexOf()
, которые преобразуют аргумент регулярного выражения в строку, а затем выполняют поиск этой строки.
Метод повторения()
В таких языках, как Python и Ruby, вы можете повторять строку как:
"foo" * 3; // "foofoofoo"
Это не работает в JS, потому что умножение *
определено только для чисел, и, таким образом, "foo"
приводит к NaN
числу.
Однако ES6 определяет метод прототипа строки repeat(..)
для выполнения задачи. ECMAScript 6 добавляет к строкам метод repeat()
, который принимает количество повторений строки в качестве аргумента. Он возвращает новую строку, содержащую исходную строку, повторенную указанное количество раз. Например:
console.log("x".repeat(3));
// "xxx"
console.log("hello".repeat(2));
// "hellohello"
console.log("abc".repeat(4));
// "abcabcabcabc"
Вот JSBin для вышеперечисленного: https://jsbin.com/jatekiw/edit?html,console
Этот метод прежде всего является функцией удобства, и он может быть особенно полезен при манипулировании текстом. Это особенно полезно в утилитах форматирования кода, которым необходимо создавать уровни отступов, например:
// indent using a specified number of spaces
var
indent
=
" ".repeat(4),
indentLevel
=
0;
// whenever you increase the indent
var
newIndent
=
indent.repeat(++indentLevel);
Первый вызов repeat()
создает строку из четырех пробелов, а переменная indentLevel
отслеживает уровень отступа.
Затем вы можете просто вызвать repeat()
с увеличенным indentLevel
, чтобы изменить количество пробелов.
Если вам понравилось читать, сделайте это сердце зеленым! Рекомендуйте его друзьям и, конечно же, дайте мне знать, если у вас есть какие-либо отзывы.
Вы также можете присоединиться к моему слабому сообществу.
Оформить заказ http://www.programmingbuddy.club
Упражнения для практики: (по желанию)
Упражнение 1:
Создайте новую строку с текстом «Присоединяйтесь к команде Happy Learning в slack» и выполните следующие действия: Для всего этого просто используйте описанные выше методы и создайте console.log теста.
- Проверить, начинается ли строка с «Присоединиться»?
- Проверить, начинается ли строка с «Happy»?
- Проверьте, заканчивается ли строка на «Learning»?
- Проверить, заканчивается ли строка на «slack»?
- Проверьте, включает ли строка «Присоединиться сейчас»?
- Проверить, содержит ли строка фразу «Счастливое обучение»?
- Проверить, начинается ли строка с «Happy», начиная с позиции 10?
- Проверить, заканчивается ли строка словом «Обучение», начиная с позиции 10?
- Проверить, включает ли строка фразу «Счастливое обучение», начиная с позиции 4?
"Решение"
Упражнение 2:
Создайте текстовый вывод в виде «Привет… Как… ты… ты… ты???» используя метод repeat()
. Вы можете создавать и использовать эти константы.
const hello = “Hello”; const how = “How” const dot = “.”; const are = “are”; const you = “you”; const question = “?”;
"Решение"