问题描述
|
我想使用字符串来执行全局正则表达式,但其中可能包含正则表达式字符。在用它构建一个正则表达式之前,转义字符串中所有正则字符的最佳方法是什么?
基本上我可能会有这样的事情;
var test = \'test.\';
var regex = new RegExp(test,\'ig\');
我需要\'test。\'成为\'test \\。\',所以它不会以意外的方式运行。
解决方法
new RegExp(test.replace(/[#-.]|[[-^]|[?|{}]/g,\'\\\\$&\'));
或者简单地:
new RegExp(test.replace(/[#-}]/g,\'\\\\$&\'));
后者最终将逃逸的次数超过了应有的幅度,但不会造成任何伤害。
, 这会将所有特殊的RegExp字符替换为它们的转义版本:
test = test.replace(/[\\\\\\.\\+\\*\\?\\^\\$\\[\\]\\(\\)\\{\\}\\/\\\'\\#\\:\\!\\=\\|]/ig,\"\\\\$&\");