четверг, 28 октября 2010 г.

[утилиты онлайн] 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,'
')

sfdg

А вот такое как экранировать? Утилита не помогла
/_avatar32');" title="

Отправить комментарий