用原生的 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)。如果你知道正则表达式模式将会改变,或者你事先不知道什么模式,而是从另一个来源获取,如用户输入,这些情况都可以使用构造函数。