логотип PurpleSchool
  • Бесплатно
      Карта развитияОсновы разработкиCSS Flexbox
    • Новостные рассылкиИконка стрелки
    • База знанийИконка стрелки
    • Карьерные пути
      • Frontend React разработчик
      • Frontend Vue разработчик
      • Backend разработчик Node.js
      • Fullstack разработчик React / Node.js
      • Mobile разработчик React Native
      • Backend разработчик Golang
      • Devops инженер
    • О нас
      • Отзывы
      • Реферальная программа
      • О компании
      • Контакты
    • Иконка открытия меню
      • Сообщество
      • PurpleПлюс
      • AI тренажёр
      • Проекты
    логотип PurpleSchool
    ютуб иконка
    Telegram иконка
    VK иконка
    Курсы
    ГлавнаяКаталог курсовFrontendBackendFullstack
    Практика
    КарьераПроектыPurpleПлюс
    Материалы
    БлогБаза знаний
    Документы
    Договор офертаПолитика конфиденциальностиПроверка сертификатаМиграция курсовРеферальная программа
    Реквизиты
    ИП Ларичев Антон АндреевичИНН 773373765379contact@purpleschool.ru

    PurpleSchool © 2020 -2025 Все права защищены

  • Курсы
    Иконка слояПерейти в каталог курсов
    • FrontendИконка стрелки
    • BackendИконка стрелки
    • DevOpsИконка стрелки
    • MobileИконка стрелки
    • ТестированиеИконка стрелки
    • Soft-skillsИконка стрелки
    • ДизайнИконка стрелки
    • Картинка группы Общее

      Общее


      • Основы разработки
      • Основы Git
      • HTML и CSS
      • CSS Flexbox
      • Основы JavaScript
      • Продвинутый JavaScript
      • TypeScript с нуля
      • Neovim
    • Картинка группы React

      React


      • React и Redux Toolkit
      • Zustand
      • Next.js - с нуля
      • Feature-Sliced Design
    • Картинка группы Vue.js

      Vue.js


      • Vue 3 и Pinia
      • Nuxt
      • Feature-Sliced Design
    • Картинка группы Angular

      Angular


      • Angular 19 Иконка курсаСкоро!
    • Картинка группы Node.js

      Node.js


      • Основы Git
      • Основы JavaScript
      • Продвинутый JavaScript
      • Telegraf.js Иконка курсаСкоро!
      • TypeScript с нуля
      • Node.js с нуля
      • Nest.js с нуля
    • Картинка группы Golang

      Golang


      • Основы Git
      • Основы Golang
      • Продвинутый Golang
      • Golang - Templ Fiber HTMX
    • Картинка группы C#

      C#


      • Основы C#
    • Картинка группы PHP

      PHP


      • Основы PHP Иконка курсаСкоро!
    • Картинка группы Python

      Python


      • Основы Python
      • Продвинутый Python
    • Картинка группы Общее

      Общее


      • Основы разработки
      • Docker и Ansible
      • Kubernetes и Helm
      • Микросервисы
      • Neovim
    • Картинка группы Общее

      Общее


      • Основы разработки
      • Основы Git
      • Основы Linux
      • Bash скрипты
      • Docker и Ansible
      • Kubernetes и Helm
      • Микросервисы
      • Neovim
    • Картинка группы Общее

      Общее


      • Основы разработки
      • Основы Git
      • Neovim
    • Картинка группы React Native

      React Native


      • HTML и CSS
      • Основы JavaScript
      • Продвинутый JavaScript
      • TypeScript с нуля
      • React и Redux Toolkit
      • React Native и Expo Router
    • Картинка группы Swift

      Swift


      • Основы Swift и iOS
    • Картинка группы Общее

      Общее


      • Продвинутое тестирование Иконка курсаСкоро!
      • Основы тестирования ПО
    • Картинка группы Общее

      Общее


      • Собеседование
      • Современный Agile
    • Картинка группы Figma

      Figma


      • Основы дизайна
  • логотип PurpleSchool
    • Сообщество
    • PurpleПлюс
    • AI тренажёр
    • Проекты
    Главная
    Сообщество
    Строки и регулярные выражения в JavaScript

    Строки и регулярные выражения в JavaScript

    Аватар автора Строки и регулярные выражения в JavaScript

    Валерий Шестернин

    Иконка календаря22 августа 2023

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

    Определение и инициализация строк

    Чаще всего для создания строк используют кавычки и просто помещают в них нужное значение (”Hello, World!”). Одинарные и двойные кавычки в языке уже давно и работают идентично, а обратные (Hello, World!) появились позже и имеют некоторые особенности. Так обратные кавычки могут занимать больше одной строки и в них можно вставлять выражения с помощью конструкции ${}. Кроме разных видов кавычек, в JavaScript также есть экранирующий символ (`). Его использование позволяет вставлять специальные символы, такие как сами кавычки внутри строки (”), перенос на новую строку (\n), табуляция (\t), сам обратный слэш (\`) и другие внутри строковых значений.

    const myString1 = "это строка с 'кавычками' внутри";
    //можно просто использовать разные виды кавычек
    const myString2 = `это строка с 
    переносом`;
    const myString3 = "и эта\n тоже";
    
    const res = 2 + 2;
    console.log(`ответ: ${res}`); //ответ: 4
    

    Как и у других типов данных, у строк тоже есть конструктор, new String() но его поведение весьма специфично и может отличаться от ожидаемого потому что он возвращает объект а не строку. Для преобразования какого-либо значения в строку лучше передать его в глобальный объект String, а не использовать конструктор.

    const str1 = new String("Hello world"); // [String: 'Hello world']
    const str2 = String("Hello world"); // Hello world
    str1.valueOf(); //Hello world
    //конечно можно получить и строку из объекта, но придется писать больше кода
    typeof str1; // "object"
    typeof str2; // "string"
    

    Основные операции над строками

    Строки в JavaScript - итерируемый тип данных и итерируются они по символам. Число символов в строке можно узнать вызвав свойство length . У каждого символа есть индекс начиная с 0 у первого символа. Мы можем получить доступ к любому символу обратившись по его индексу. Мы так же можем получить индекс первого или последнего вхождения подстроки с помощью методов indexOf() и lastIndexOf() соответственно. Оба метода принимают саму подстроку и необязательным параметром индекс начала поиска. Если важен не индекс а сам факт наличия подстроки в начала, конце или определенном участке строки, можно воспользоваться методами startsWith() и endsWith(), которые принимают те же параметры и возвращают ответ в виде булева значения.

    const myStr = "Hello, World!";
    myStr[1]; //e
    myStr.length; //13
    myStr.indexOf("l"); //3
    //"l" с индексом 2 не учитывалась потому что посик начат с 3
    myStr.startsWith("Hell"); //true
    myStr.endsWith("?"); //false
    

    Важно помнить, что строки неизменяемый тип данных и мы не можем просто переопределить подстроку по индексу. Вместо этого следует создать новую строку с помощью метода slice(), который принимает индекс начала и необязательным параметром конца “среза” и возвращает подстроку, содержащую все символы исходной строки между указанными индексами. Если индекс конца не указан - “срез” будет сделан до конца исходной строки. Так же можно воспользоваться методом replace(), который, при базовом использовании, принимает искомую подстроку и подстроку, которая ее заменит и возвращает новую строку. Полученные строки, как и любые другие, можно конкатенировать (объединять) в новую строку с помощью оператора сложения “+” или метода concat() . Оператор сложения при конкатенации строки с числом преобразует число в строку.

    const myStr = "Hello, World!";
    const slice = myStr.slice(0, 6); //Hello,
    const replace = myStr.replace("World", "John"); //Hello, John!
    const myStr2 = "Number: " + 42; //Number: 42
    

    Из полезных методов для работы со строками можно так же отметить toLowerCase() и toUpperCase(), которые возвращают новую строку с теми же символами, что в исходной, но в нижнем и верхнем регистре соответственно, а так же метод trim(), который возвращает новую строку без пробелов в начале и конце.

    Регулярные выражения

    Иногда нам нужно найти в строке не конкретную подстроку, а что-то более абстрактное, например все цифры, даты, слова на определенном языке или подстроки, содержащие определенные символы. В таких случаях на помощь приходят регулярные выражения (Regular Expressions или просто "регэксы") и специальные методы строк для работы с ними. Они позволяют сопоставлять и обрабатывать текст с использованием описанных шаблонов, что делает их очень полезными для поиска, замены и проверки наличия определенных паттернов в строках. Они состоят из символов и метасимволов, которые формируют шаблон. Вот некоторые из таких метасимволов, которые можно использовать в регулярных выражениях:

    • . - любой символ, кроме переноса строки.
    • \d - любая цифра
    • \D - все, кроме цифр
    • \w - любая буква
    • \W - все, кроме букв
    • \s - пробел
    • ^ - начало строки.
    • $ - конец строки.
    • []: один символ из набора символов или диапазона символов. Например [abcd] и [a-d] это один и тот же набор символов.
    • ( ) - группирует часть выражения в область видимости операторов.
      • предыдущий символ 0 или более раз.
      • предыдущий символ 1 или более раз.
    • ? - предыдущий символ 0 или 1 раз.
    • \ - экранирует следующий символ или указывает на специальные символы, такие как \n (новая строка) или \t (табуляция).

    Регулярные выражения могут быть модифицированы с помощью флагов (модификаторов), которые определяют дополнительные параметры поиска. Вот некоторые распространенные модификаторы:

    • g - поиск по всем совпадениям вместо первого.
    • i - игнорировать регистр символов при поиске.
    • m - ищет совпадения в каждой строке, а не только в начале и конце всей строки.

    Регулярные выражения могут хранится как значение переменной с типом RegExp. Так шаблон для поиска всех строк или подстрок с датой в формате dd.mm.yyyy будет выглядеть как const datePattern=/\d{2}.\d{2}.\d{4}/g . Давайте его разберем: сначала идет слэш / как начало выражения, потом \d{2} означает две любые цифры, после них идет символ точки, экранированный обратным слэшем ., ведь иначе точка будет означать любой символ. Такая конструкция (\d{2}.) повторяется трижды, но в последний раз мы ищем уже 4 цифры номера года. После этого идут закрывающий выражение слэш / и флаг g который указывает на то что выражение ищет все совпадения, а не только первое. JavaScript предоставляет несколько методов для работы с регулярными выражениями:

    • test(): метод строки, который проверяет, соответствует ли строка заданному паттерну регулярного выражения. Он возвращает true, если совпадение найдено, и false в противном случае.
    • exec(): метод регулярного выражения, который выполняет поиск совпадений в строке. Он возвращает массив с информацией о совпадении или null, если совпадение не найдено.
    • match(): метод строки, который выполняет поиск совпадений в строке с использованием заданного паттерна регулярного выражения. Он возвращает массив с информацией о найденных совпадениях или null, если совпадение не найдено.
    • search(): метод строки, который выполняет поиск позиции первого совпадения заданного паттерна регулярного выражения в строке. Он возвращает позицию совпадения или -1, если совпадение не найдено.

    Регулярные выражения так же могут применяться в методах split() и replace().

    const myStr1 = "Today is 20.08.2023, tomorrow will be 21.08.2023";
    const datePattern = /\d{2}.\d{2}.\d{4}/g;
    const dates = myStr1.match(datePattern); //[ '20.08.2023', '21.08.2023' ]
    
    const myStr2 = "test@example.com";
    const emailPattern = /^[\w-]+(.[\w-]+)*@([\w-]+.)+[a-zA-Z]{2,7}$/;
    //шаблон проверки на соответствие адресу электронной почты
    const isEmail = emailPattern.test(myStr2); //true
    
    const myStr3 = "Hello, World! My name is John.";
    const space = /\s/;
    //этот шаблон можно заменить на строку с пробелом (" ").
    const arrFromStr = myStr3.split(space); // ["Hello,", "World!", "My", "name", "is", "John."]

    Заключение:

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

    Иконка глаза3 516

    Комментарии

    0

    Постройте личный план изучения Основы разработки до уровня Middle — бесплатно!

    Основы разработки — часть карты развития Frontend, Backend, Mobile

    • step100+ шагов развития
    • lessons30 бесплатных лекций
    • lessons300 бонусных рублей на счет

    Бесплатные лекции

    Лучшие курсы по теме

    изображение курса

    Основы Git

    Антон Ларичев
    AI-тренажеры
    Гарантия
    Бонусы
    иконка звёздочки рейтинга4.9
    3 999 ₽ 6 990 ₽
    Подробнее
    изображение курса

    HTML и CSS

    Антон Ларичев
    AI-тренажеры
    Практика в студии
    Гарантия
    Бонусы
    иконка звёздочки рейтинга4.9
    3 999 ₽ 6 990 ₽
    Подробнее
    изображение курса

    CSS Flexbox

    Антон Ларичев
    Гарантия
    Бонусы
    иконка звёздочки рейтинга4.9
    бесплатно
    Подробнее
    Иконка чипа0