Строки, возможно, являются одним из самых важных типов данных в программировании. Они есть почти в каждом языке программирования более высокого уровня, и возможность эффективной работы с ними имеет основополагающее значение для разработчиков при создании полезных программ.

Строки JavaScript всегда отставали от аналогичных функций других языков. Например, только в ECMAScript 5 строки наконец получили метод trim(), а ECMAScript 6 продолжает расширять возможности JavaScript для анализа строк с новыми функциями.

Функции проверки строк или подстроки

До ECMAScript 6 мы традиционно использовали метод inedxOf() для идентификации строк внутри других строк.

ECMAScript 6 включает следующие три метода, предназначенные именно для этого:

  1. includes() — метод includes() возвращает true, если заданный текст находится в любом месте строки. Если он не найден, он возвращает false.
  2. startsWith() — метод startsWith() возвращает true, если заданный текст находится в начале строки. Если он не найден, он возвращает false.
  3. 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 теста.

  1. Проверить, начинается ли строка с «Присоединиться»?
  2. Проверить, начинается ли строка с «Happy»?
  3. Проверьте, заканчивается ли строка на «Learning»?
  4. Проверить, заканчивается ли строка на «slack»?
  5. Проверьте, включает ли строка «Присоединиться сейчас»?
  6. Проверить, содержит ли строка фразу «Счастливое обучение»?
  7. Проверить, начинается ли строка с «Happy», начиная с позиции 10?
  8. Проверить, заканчивается ли строка словом «Обучение», начиная с позиции 10?
  9. Проверить, включает ли строка фразу «Счастливое обучение», начиная с позиции 4?

"Решение"

Упражнение 2:

Создайте текстовый вывод в виде «Привет… Как… ты… ты… ты???» используя метод repeat(). Вы можете создавать и использовать эти константы.

const hello = “Hello”;
 const how = “How”
 const dot = “.”;
 const are = “are”;
 const you = “you”;
 const question = “?”;

"Решение"