【问题标题】:When converting an array of random characters into a regexp, how to escape the reserved characters?将随机字符数组转换为正则表达式时,如何转义保留字符?
【发布时间】:2020-07-24 03:43:02
【问题描述】:

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

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

哪个工作正常。 问题是当随机字符数组包含特殊的正则表达式字符时:$ 我应该把他们当作一个普通角色。

我发现了这个: RegExp special characters escape 但不适用于我的情况(我是初学者,刚刚学习 Javascript)。

我试过了:

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

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

【问题讨论】:

  • regexMarkers.toString().replace...
  • markers.toString() 上执行replace,就像使用,->| 替换一样,之前将字符串传递到new RegExp
  • 为什么不直接使用escape(和unescape)?

标签: javascript regex


【解决方案1】:

要转义正则表达式中的任何特殊字符,您只需在其前面使用\ 转义字符。你找到的那个正则表达式就是这样做的,你只需要在你的字符串上使用它:

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

您找到的所有正则表达式都是匹配那些特殊的正则表达式字符并将它们替换为\$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

【讨论】:

  • 谢谢@ethan-reiland,这行得通。也感谢您的解释,我不确定 '\\$1' 部分。
猜你喜欢
  • 2019-12-25
  • 2014-09-22
  • 2019-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-05
  • 1970-01-01
相关资源
最近更新 更多