我想使用字符串来执行全局正则表达式,但它可能包含正则表达式字符。在使用它构建正则表达式之前,在字符串中转义所有正则表达式字符的最佳方法是什么?
基本上我可能有这样的东西;
var test = 'test.';
var regex = new RegExp(test, 'ig');
我需要'测试'。成为'测试\'。所以它不会以意想不到的方式表现。
答案 0 :(得分:10)
new RegExp(test.replace(/[#-.]|[[-^]|[?|{}]/g, '\\$&'));
或简单地说:
new RegExp(test.replace(/[#-}]/g, '\\$&'));
后者最终会逃避比它应有的更多,但它不会伤害任何东西。
答案 1 :(得分:3)
这会将所有特殊的RegEx字符替换为其转义版本:
test = test.replace(/[\\\.\+\*\?\^\$\[\]\(\)\{\}\/\'\#\:\!\=\|]/ig, "\\$&");