如何在循环中创建正则表达式?

时间:2018-12-27 08:33:14

标签: javascript arrays node.js regex ecmascript-6

我目前有一个正则表达式,如下所示:

const ignoreRegex = new RegExp(/^\/(?!fonts|static).*$/)

但是,我也有一个动态字符串数组,例如"test",也需要忽略它们。我需要以某种方式映射此数组并将每个字符串添加到正则表达式中,例如:

  const ignoreRegex = new RegExp(/^\/(?!fonts|static + ignoreRoutes.map(x => `|${x}`) + ).*$/)

我该怎么做?

2 个答案:

答案 0 :(得分:3)

您可以省略正则表达式周围的/ /并在RegExp构造函数中使用字符串。

请参见下面的代码。

const ignoreFolders = ["fonts", "static"];
const ignoreRoutes = ["route1", "route2"];
const ignore = ignoreFolders.concat(ignoreRoutes);

const ignoreRegex = new RegExp(`^\/(?!${ignore.join("|")}).*$`);

console.log(ignoreRegex);

如果字符串中有任何正则表达式特殊字符,它们将自动转义。

答案 1 :(得分:0)

const ignoreRoutes = ["fonts","static","aaa","bbb","ccc"];
const ignoreRegex = new RegExp(`^\\/(?!${ignoreRoutes.join("|")}).*$`);