Проблема с escape-функцией RegExp - Javascript - PullRequest
3 голосов
/ 08 мая 2020

Попытка экранировать специальные символы. Я набираю $ или ^ или | работает нормально. Почему мой приведенный ниже код не экранируется () {}? * + и \, когда я набираю их, я получаю ошибку недопустимого выражения.

escape = function(value) {
    return value.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&");
}

что-то не так с приведенным выше выражением ???

MDN предлагает это

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

даже в этом случае я столкнулся с той же проблемой. нет ошибок для {} $ ^ | но я получаю ошибку для () *? \ +

1 Ответ

1 голос
/ 08 мая 2020

Они относятся к классу символов (обозначенному []), что означает, что их не нужно экранировать. Их нужно экранировать только тогда, когда они находятся вне класса символов и в регулярном выражении, так как они будут обозначать определенные операции (например, {1,3} означает «от одного до трех раз включительно»).

Также небольшой пункт прояснения вашего вопроса - код не экранирует \, вы избегаете \, складывая два из них вместе - \\ - это выход для \. Поэтому только {} и () не экранируются, чтобы ответить на вопрос в верхней части вашего сообщения.

...