JS在正则表达式中使用变量

4 min read

用原生的 RegExp( ),不推荐用eval:

var reg = RegExp(带变量的字符串, 参数)

第一个字符串相当于原本正则 / / 里的内容。

有两种方法可以创建一个 RegExp 对象:一种是字面量,另一种是构造函数。

  • 字面量

    由斜杠(/)包围而不是引号包围。

  • 构造函数的字符串参数

    由引号而不是斜杠包围。

以下三种表达式都会创建相同的正则表达式:

/ab+c/i; //字面量形式
new RegExp('ab+c', 'i'); // 首个参数为字符串模式的构造函数
new RegExp(/ab+c/, 'i'); // 首个参数为常规字面量的构造函数

当表达式被赋值时,字面量形式提供正则表达式的编译(compilation)状态,当正则表达式保持为常量时使用字面量。例如当你在循环中使用字面量构造一个正则表达式时,正则表达式不会在每一次迭代中都被重新编译(recompiled)。

而正则表达式对象的构造函数,如 new RegExp('ab+c') 提供了正则表达式运行时编译(runtime compilation)。如果你知道正则表达式模式将会改变,或者你事先不知道什么模式,而是从另一个来源获取,如用户输入,这些情况都可以使用构造函数。