阿西河

所有教程

公众号
🌙
阿西河前端的公众号

我的收藏

    最近访问  (文章)

      教程列表

      抓包专区
      测试专区

      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 (字符、在字符串中通常被转义为、\,而在正则表达式字符串中就 会变成、\\)。

      目录
      目录