Преобразование строки в регулярное выражение

Рейтинг: 0Ответов: 1Опубликовано: 12.02.2023

Описание

Есть поле ввода, где пользователь вводит какой-нибудь текст. Я должен введенный им текст обработать немного и преобразовать в регулярное выражение, чтобы искать с помощью него совпадения в тексте.
Такая небольшая проблема в том, что если я просто возьму и создам regex из ввода, результат будет совершенно неправильным. К примеру:

Текст Ввод Совпадения
Сообщество здесь, чтобы помочь вам с конкретными проблемами по программированию, алгоритмам, языкам программирования. я. яз, я.

Нам мешают служебные символы и части, как символ . в примере выше.
Чтобы это предотвратить нам нужно выделять их символом \.

Вопрос

Есть какой-нибудь встроенный способ безопасного преобразования, как к примеру для ссылок window.encodeURI?
Если нет, есть ли хороший способ для решения этой задачи, или же просто:

input = input.replace(`/[\$\^\*\(\)\{\}\+\?\[\]\.\?\,\|\\\/\`\_]/g`, `\\$0`);

Ответы

▲ 1Принят

Экранирование пользовательского ввода, соответствующего буквенной строке внутри регулярного выражения, может быть достигнуто простой заменой:

function escapeRegExp(string){
  return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
}

RTFM