将随机字符数组转换为正则表达式时,如何转义保留字符



我有一个随机字符数组(可以是任何字符(。我已经设法将它们转换为正则表达式:

var regexMarkers = new RegExp(markers.toString().replace(/,/g, '|'), 'gi');

它运行良好。问题是当随机字符数组包含特殊的正则表达式字符时,如:$我应该把他们当作一个普通人来对待。

我发现:RegExp特殊字符转义但不适用于我的情况(我是初学者,只是在学习Javascript(。

我试过这个:

let newMarkers = regexMarkers.replace(/([.*+?^=!:${}()|[]/\])/g, "\$1");

但是我得到一个错误,regexMarkers.replace不是一个函数。有什么建议吗?

要转义regex中的任何特殊字符,只需要在其前面使用转义符。您找到的regexp可以做到这一点,您只需要在字符串上使用它,如下所示:

var regexMarkers = new RegExp(markers.toString().replace(/([.*+?^=!:${}()|[]/\])/g, "\$1").replace(/,/g, '|'), 'gi');

您找到的regexp所做的就是匹配那些特殊的regex字符,并用$1替换它们,$1代表它匹配的特殊字符。

这使得这行代码有点长,所以将其拆分为多行不会有什么坏处,但无论哪种方式,都应该解决您的问题。

以下是我自己的测试,以确保它有效:

let markers = ['a', 'b', '$', 'c'];
var regexMarkers = new RegExp(markers.toString().replace(/([.*+?^=!:${}()|[]/\])/g, "\$1").replace(/,/g, '|'), 'gi');
console.log(regexMarkers);
//output: /a|b|$|c/gi

最新更新