在RegExp构建之前清理正则表达式字符串?

时间:2011-06-09 22:46:54

标签: javascript regex sanitization

我想使用字符串来执行全局正则表达式,但它可能包含正则表达式字符。在使用它构建正则表达式之前,在字符串中转义所有正则表达式字符的最佳方法是什么?

基本上我可能有这样的东西;

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

我需要'测试'。成为'测试\'。所以它不会以意想不到的方式表现。

2 个答案:

答案 0 :(得分:10)

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

或简单地说:

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

后者最终会逃避比它应有的更多,但它不会伤害任何东西。

答案 1 :(得分:3)

这会将所有特殊的RegEx字符替换为其转义版本:

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