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