Преобразование строки в регулярное выражение
Описание
Есть поле ввода, где пользователь вводит какой-нибудь текст. Я должен введенный им текст обработать немного и преобразовать в регулярное выражение, чтобы искать с помощью него совпадения в тексте.
Такая небольшая проблема в том, что если я просто возьму и создам regex из ввода, результат будет совершенно неправильным. К примеру:
| Текст | Ввод | Совпадения |
|---|---|---|
| Сообщество здесь, чтобы помочь вам с конкретными проблемами по программированию, алгоритмам, языкам программирования. | я. | яз, я. |
Нам мешают служебные символы и части, как символ . в примере выше.
Чтобы это предотвратить нам нужно выделять их символом \.
Вопрос
Есть какой-нибудь встроенный способ безопасного преобразования, как к примеру для ссылок window.encodeURI?
Если нет, есть ли хороший способ для решения этой задачи, или же просто:
input = input.replace(`/[\$\^\*\(\)\{\}\+\?\[\]\.\?\,\|\\\/\`\_]/g`, `\\$0`);
Ответы (1 шт):
Экранирование пользовательского ввода, соответствующего буквенной строке внутри регулярного выражения, может быть достигнуто простой заменой:
function escapeRegExp(string){
return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
}