[утилиты онлайн] RegExp.escape: Экранирование строки при формировании регулярных выражений в javascript (функция и рабочий пример)
Часто возникает необходимость экранировать строку для использования внутри регулярного выражения в Javascript. Рассмотрим, как это сделать.
Примечание: на эту страницу часто попадают из Гугла по запросу «javascript экранирование спецсимволов». Если вам нужно, экранирование спецсимволов в строках javascript, нажмите на эту ссылку. Ну а здесь продолжим разговор про регулярные выражения:
В javascript стандартный класс RegExp обычно прекрасно удовлетворяет потребности по обработке регулярных выражений, но для полного удобства работы с регэкспами ему не хватает метода для экранирования произвольной строки. Необходимость экранировать произвольную строку обычно взникает, когда вы динамически формируете регулярки при работе скрипта. К счастью, проблема легко решается объявлением следующей функции:
RegExp.escape = function(text) { return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"); }
А если вам нужно просто экранировать уже известную строку для вставки в скрипт, можете воспользоваться следующей нехитрой утилитой:
Введите текст, требующий экранирования:
Результат:
Примечание:
В комментариях подсказывают, что при объявлении функции надо писать RegExp.prototype.escape = function, а не RegExp.escape = function. На самом деле это не так.
Если вы объявите функцию как RegExp.prototype.escape, она будет доступна у экземпляров класса RegExp, но не в самом объекте RegExp. Это не то, что нам требуется. Нам ведь не нужен конкретный экземпляр регулярного выражения для вызова этой функции, функция никак не взаимодействует с регулярным выражением, а просто экранирует строку.
Если же вы хотите, чтобы функция была доступна и в объекте RegExp, и в его экземплярах, объявите функцию так:
RegExp.prototype.escape = RegExp.escape = function(text) { return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"); }
6 комментариев
213
Автору респект.
Утилита - пример совершенного ПО )
Спасибо!
RegExp.prototype.escape = function(text) {
return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
}
.replace(/\n|\r|\n\r|\r\n/g,'
')
А вот такое как экранировать? Утилита не помогла
/_avatar32');" title="
Отправить комментарий