如何在动态RegExp中处理令牌字符



好吧,假设我有一个前缀列表,我想在RegExp中使用,看起来像这样:

const prefixes = ["*","|","^"];
const prefixDetector = new RegExp(`^${prefixes.join('|')}`, 'gmi');

这很好,但唯一的问题是我的RegExp是这样的:

const regex = /^*|||^/gmi
//What Went Wrong: "|||" will search for blank characters, A.K.A "".

结果应该是这样的。

const regex = /^*|||^/gmi
//Expected

我可以使用如下代码:

...
const prefixDetector = new RegExp(`^\${prefixes.join('|\')}`, 'gmi');

假设它会显示为上面的代码,但当我添加这样的前缀时:

const prefixes = ['*','|','^','b','s'];

我会得到这样的东西:

const regex = /^*|||^|b|s/gmi
//What Went Wrong: It is correct, but "b" and "s" are Regex tokens in Javascript.

请记住,bs用于单词边界和空白字符。

我在这里尝试的是匹配前缀,前缀可以长于1个字符,并且可以自定义,所以像/[%%]/gmi这样的东西不会剪切它,因为它只处理1个字符。

所以它会像:

const prefixes = ['%%', 'b', 'percentage', 'percent'];
const RegExp = new RegExp('...?', 'gmi');
//test RegExp on something like "%%afterprefix" or "percentthing";

为了防止Regex解释那些具有特殊含义的字符,您必须在数组中对其进行转义。

例如["\s", "\b", "\|", "\^"]

最新更新