Есть ли функция RegExp.escape в Javascript? - PullRequest
374 голосов
/ 25 августа 2010

Я просто хочу создать регулярное выражение из любой возможной строки.

var usersString = "Hello?!*`~World()[]";
var expression = new RegExp(RegExp.escape(usersString))
var matches = "Hello".match(expression);

Есть ли встроенный метод для этого?Если нет, что люди используют?Рубин имеет RegExp.escape.Я не чувствую, что мне нужно писать свое, должно быть что-то стандартное.Спасибо!

Ответы [ 12 ]

2 голосов
/ 29 апреля 2016
escapeRegExp = function(str) {
  if (str == null) return '';
  return String(str).replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1');
};
0 голосов
/ 02 августа 2014

Функции в других ответах излишни для экранирования целых регулярных выражений (они могут быть полезны для экранирования частей регулярных выражений, которые впоследствии будут объединены в большие регулярные выражения).

Есливы избегаете целого регулярного выражения и покончите с ним, цитируя метасимволы, которые либо автономны (., ?, +, *, ^, $, |, \) или начать что-то ((, [, {) - это все, что вам нужно:

String.prototype.regexEscape = function regexEscape() {
  return this.replace(/[.?+*^$|({[\\]/g, '\\$&');
};

И да, разочаровывает, что в JavaScript нет такой функции, как эта встроенная.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...