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

构造函数可以实现!

功能区别

  • 字面量:当正则表达式保持不变时,使用此方法可获得更好的性能。
  • 构造函数:当你知道正则表达式的模式将会改变,或者你不知道模式,并且从其他来源获取它,如用户输入。

推荐使用字面量方式,如果是包含变量的正则,只能使用构造函数方式。

使用区别

字面量方式和实例创建的方式在正则中的区别?

    1. 字面量方式中出现的一切都是元字符,所以不能进行变量值的拼接,而实例创建的正则表达式可以使用变量;
    1. 字面量方式中直接写 d 就可以,而在实例中需要把它转译 \\d

要注意的是,传递给 RegExp 构造函数的两个参数都是字符串(不能把正则表达式字面量传递给 RegExp 构造函数)。由于 RegExp 构造函数的模式参数是字符串,所以在某些情况下要对字符进行双重转义。所有元字符都必须双重转义,那些已经转义过的字符也是如此,例如 \n (字符、在字符串中通常被转义为、\,而在正则表达式字符串中就 会变成、\\)。

AXIHE / 精选资源

浏览全部教程

面试题

学习网站

前端培训
自己甄别

前端书籍

关于朱安邦

我叫 朱安邦,阿西河的站长,在杭州。

以前是一名平面设计师,后来开始接接触前端开发,主要研究前端技术中的JS方向。

业余时间我喜欢分享和交流自己的技术,欢迎大家关注我的 Bilibili

关注我: Github / 知乎

于2021年离开前端领域,目前重心放在研究区块链上面了

我叫朱安邦,阿西河的站长

目前在杭州从事区块链周边的开发工作,机械专业,以前从事平面设计工作。

2014年底脱产在老家自学6个月的前端技术,自学期间几乎从未出过家门,最终找到了满意的前端工作。更多>

于2021年离开前端领域,目前从事区块链方面工作了