在生成RegExp之前对正则表达式字符串进行Sanitize处理

Sanitize string of regex characters before RegExp build?

本文关键字:字符串 Sanitize 处理 正则表达式 RegExp      更新时间:2023-09-26

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

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

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

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

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

或者简单地说:

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

后者最终会逃脱更多,但不会造成任何伤害。

这将用它们的转义版本替换所有特殊的RegExp字符:

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