Как экранировать спецсимволы в JavaScript: RegExp.escape

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

JS
Скопировать код
const escapeRegExp = (text) => text.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');

Функция escapeRegExp позволяет экранировать специализированные символы RegExp в строке, предотвращая возникновение нежелательных ситуаций.

Кинга Идем в IT: пошаговый план для смены профессии

Создание функции экранирования руками

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

Функция экранирования, заменяющая все специальные символы на их экранированные версии, обладает особенной аккуратностью. Код возвращается вам уже с "отвечающими по уставу" символами.

Если же вы не хотите заморачиваться с самостоятельной разработкой функции, можете использовать готовое решение — _.escapeRegExp, из популярной библиотеки Lodash.

Телохранитель для регулярных выражений

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

JS
Скопировать код
/[-[\]{}()*+?.,\\^$|#\s]/g

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

Регулярное выражение будущего, уже сегодня

Мы не можем предсказать, какие новое привнесёт будущее JavaScript, поэтому мощная функция экранирования регулярных выражений, которая всегда будет актуальна, представляет собой надёжный компас в неопределённом мире программирования.

Разработка функции regExpEscapeFuture, готовой к возможным изменениям в спецификации языка, — это постройка космического корабля: быть готовым ко всему.

Обработка пользовательского ввода

Регулярные выражения без защиты от неожиданных вводов пользователя — это как кухня без огнетушителя. Функция экранирования обеспечивает надёжную обработку ввода, держа любые сюрпризы вне радиуса действия.

Визуализация

Функция RegExp.escape — это как сетка, которая сдерживает агрессию специальных символов:

Markdown
Скопировать код
Специальные символы: [ . ^ $ * + ? ( ) [ ] \ { } | ]

Без RegExp.escape:

JS
Скопировать код
`*`.match(new RegExp(`*`)); // Ошибка: TypeError('У символов тоже есть привилегии!')

🔴 ОПАСНОСТЬ – Специальные символы вне контроля!

С RegExp.escape:

JS
Скопировать код
`*`.match(new RegExp(escapeRegExp(`*`))); // '*' найден, отлично!

🔵 ЗАЩИЩЕНО – Специальные символы находятся под контролем.

Таблица экранированных символов для вашего сведения:

Markdown
Скопировать код
| Специальный символ | До      | После        |
| ------------------ | ------- | ------------ |
| * (звездочка)      | 🔴 Тревожный  | 🔵 Обезврежен   |
| . (точка)          | 🔴 Нестабильный | 🔵 Конкретный |
| $ (доллар)         | 🔴 Заметный   | 🔵 Нейтральный      |

Когда контекст решает всё

Тире: "Я создаю диапазоны, это моя задача!"

Два подряд идущих обратных слеша озаряют текст особым волшебством, сохраняя свой первоначальный смысл.

Учитывая возможность повышения статуса до специальных символов некоторых текущих второстепенных, предварительное экранирование делает ваш код готовым к будущему.

Упущенный стандарт?

Отсутствие встроенной функции RegExp.escape в JavaScript напоминает нам о такой же очевидной вещи, как пицца без сыра. Внедрение такой функции в стандарт сделало бы работу со строками проще для всех разработчиков.

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

Полезные материалы

  1. RegExp – JavaScript | MDN — регулярные выражения на Mozilla MDN.
  2. ECMAScript® 2024 Language Specification — подробности о будущем regexp в ECMAScript.
  3. Есть ли в JavaScript функция RegExp.escape? – Stack Overflow — вопрос, способствовавший началу обсуждения.
  4. Что такое регулярное выражение, Regex или Regexp — обучающие материалы по экранированию специальных символов.
  5. escape-string-regexp – npm — npm-пакет с функцией экранирования строк регулярного выражения.
  6. GitHub – tc39/proposal-regex-escaping: Proposal for investigating RegExp escaping for the ECMAScript standard — площадка для обсуждения интеграции функции RegExp.escape в будущее.