JavaScript 正则表达式创建方式 字面量和构造函数的区别
创建正则有两种方法
创建正则有两种方法,字面量方式和构造函数模式
-
字面量方式(推荐这一种)
- 方法:用两个斜杠包起来,内容"都是"用来描述规则的元字符
var reg=/\d+/g; console.log(reg.test("789456"));//true
-
构造函数
- 方法:两个参数(注意需要转移)
- 元字符字符串
- 修饰符字符串
var reg2=new RegExp("\\d+","g"); console.log(reg2.test("1234444456"));//true console.log(reg2.test("asdsa"));//false
- 方法:两个参数(注意需要转移)
构造函数因为传递的是字符串,所有
\
都需要写两个才代表\
;
虽然看起来构造函数比较复杂,但是在动态正则的应用中,是不可替代的;
在正则中使用变量
下面的type
是需要放在正则中的
let type = 'axihe';
如果是字面量方式
let type = 'axihe';
let reg1 = /^type$/
let reg2 = /^axihe$/
console.log(reg1);
console.log(reg1.test('axihe'));
console.log(reg1.test('type'));
console.log(reg2);
console.log(reg2.test('axihe'));
字面量方式,不能实现包含变量的功能! 两个斜杠包起来,内容都是用来描述规则的元字符
注意,这里的用词都是
是不对的,之所以写错,是为了引起你的注意!
正确的表述应该是:在字面量方式中,我们 //
之间包起来的所有的内容都是元字符,有的具有特殊的意义,大部分都是代表本身含义的普通的元字符,后面会详细介绍。
如果是构造函数方式
let type = 'axihe';
var reg1 = new RegExp(type, "g");
console.log(reg1);
console.log(reg1.test('axihe'));//true
console.log(reg1.test('type'));//false
构造函数可以实现!
功能区别
- 字面量:当正则表达式保持不变时,使用此方法可获得更好的性能。
- 构造函数:当你知道正则表达式的模式将会改变,或者你不知道模式,并且从其他来源获取它,如用户输入。
推荐使用字面量方式,如果是包含变量的正则,只能使用构造函数方式。
使用区别
字面量方式和实例创建的方式在正则中的区别?
-
- 字面量方式中出现的一切都是元字符,所以不能进行变量值的拼接,而实例创建的正则表达式可以使用变量;
-
- 字面量方式中直接写
d
就可以,而在实例中需要把它转译\\d
- 字面量方式中直接写
要注意的是,传递给 RegExp 构造函数的两个参数都是字符串(不能把正则表达式字面量传递给 RegExp 构造函数)。由于 RegExp 构造函数的模式参数是字符串,所以在某些情况下要对字符进行双重转义。所有元字符都必须双重转义,那些已经转义过的字符也是如此,例如 \n (字符、在字符串中通常被转义为、\,而在正则表达式字符串中就 会变成、\\)。