Очистить строку символов регулярного выражения перед сборкой RegExp? - PullRequest
10 голосов
/ 10 июня 2011

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

В принципе, у меня может быть что-то вроде этого;

var test = 'test.';
var regex = new RegExp(test, 'ig');

Мне нужен тест. стать «тестом». поэтому он не ведет себя неожиданным образом.

Ответы [ 2 ]

10 голосов
/ 10 июня 2011
new RegExp(test.replace(/[#-.]|[[-^]|[?|{}]/g, '\\$&'));

или просто:

new RegExp(test.replace(/[#-}]/g, '\\$&'));

последний будет в конечном итоге избежать намного больше, чем следовало бы, но это не повредит ничему.

3 голосов
/ 10 июня 2011

Это заменит все специальные символы RegExp на их экранированную версию:

test = test.replace(/[\\\.\+\*\?\^\$\[\]\(\)\{\}\/\'\#\:\!\=\|]/ig, "\\$&");
...