zoukankan      html  css  js  c++  java
  • WEB前端第四十课——正则表达式-RegExp、高级

    1.RegExp对象

      正则表达式的基本语法是:/正则表达式主体/修饰符(可选),这种创建正则的方法称为“字面量创建正则表达式”。

      在 js中已经为正则表达式提供了一个“构造函数RegExp”,我们可以通过这个构造函数生成正则表达式的实例,

      这种创建正则的方法称之为“构造函数创建正则表达式”。

      对于RegExp函数生成的正则实例,既能够和之前使用正则表达式一样直接使用,还可以调用一些RegExp独有的方法。

      语法:

        var reg = new RegExp('正则表达式主体','修饰符');  //RegExp也称为“正则类”

        注意,通过构造函数方式创建正则表达式,参数均采用“字符串”的形式来声明!

        特别注意,这种方式的正则表达式主体在使用元字符时,需要使用转义字符“”,比如“\d、\s”等

    2.RegExp对象方法

      ① test()方法,用于判断在目标字符串中是否存在满足正则表达式规则的子字符串,返回值为Boolean。

        语法:正则表达式 .test( ' 指定字符串 ' );  // true || false

        示例:

          var regExp = new RegExp('ab', 'g');

          var res = regExp .test('abc123AABBCC');

          console .log(res);  //返回值为“true”

        RegExp中提供的方法对于“字面量创建正则表达式”也是适用的,示例如下:

          console.log(/ab/g .test('abc123AABBCC'));  // true

      ② exec()方法,用于查找在目标字符串中“第一个”满足正则表达式的子字符串出现的“下标和内容”

             返回值是一个信息集合(对象),可以像数组一样使用,查找失败则返回 null

        语法:正则表达式 .exec('目标字符串');

        示例01:

          var regExp = new RegExp('ab', 'ig');

          var res = regExp .exec('abc123AABBCC');

          console .log(res);  //返回值:["ab", index: 0, input: "abc123AABBCC", groups: undefined]

          res = regExp .exec('abc123AABBCC');

          console .log(res);  //返回值:["ab", index: 7, input: "abc123AABBCC", groups: undefined]

          res = regExp .exec('abc123AABBCC');

          console .log(res);  //返回值:null

        可以看出,当 exec()方法连续多次查找时,每次查找都是建立在前一次的基础上,依次向后匹配。

        这是由于RegExp正则对象中提供了一个隐式参数“lastIndex”,

        这个参数将记录每次执行检索完成时,匹配结果的最后一个字符的下标,并且将其作为下次检索的开始位置。

        这个属性是可写的,

          如果上述示例中第一次检索完成后增加“res.lastIndex=0;”,那么第二次检索返回值将和第一次相同。

        示例02:

          var regExp = new RegExp('(ab)c', 'ig');

          var res = regExp .exec('abc123AABBCC');

          console .log(res);  //返回值:["abc", "ab", index: 0, input: "abc123AABBCC", groups: undefined]

          console .log(res.length);  // 返回值:2

        上述结果看出,当声明正则的时候,如果参数中存在小括号(又称作组匹配符号),
        那么返回结果的 length就不为“1”(即不仅查找一次),
        也就是说第一次查找“正则主体内容”,第二次查找“组匹配内容”,两次结果一起返回。

    3.检索模式的“^和$”字符

       “ ^ ”初位字符,表示判断字符串以某个内容开始

      “ $ ”末位字符,表示判断字符串以某个内容结束

      语法示例:

        var regExp = new RegExp('^abc','ig');  //判断是否以abc字符串开始

        var regExp = new RegExp('abc$','ig');  //判断是否以abc字符串结束

      如果同时使用“^和$”(如“^abc$”),表示在目标字符串中与正则字符串本身相同

      代码示例:

        var regExp=new RegExp('c$','ig');
        var str='abc123AABBCC';
        var res=regExp.test(str);
        console.log(res);    // true
    

    4.重复类

      重复类是正则表达式中使用大括号“{}”进行检索的一种模式,{}用来匹配符合正则要求的字符串连续出现的次数。

      通常配合表达式模式一起使用

      常见写法有以下三种:

        {n},表示检索内容连续出现 n次

        {n,},表示检索内容至少连续出现 n次

        {n,m},表示检索内容连续出现大于等于 n次,小于等于 m次

      语法示例:

        var regExp = new RegExp('[a-z]{2}','g');  //表示 全局检索连续出现的两个小写字母

      代码示例:

        var regExp=new RegExp('[a-z]{2}','ig');
        var str='abc123AABBCC';
        var res=str.match(regExp);
        console.log(res);    //返回结果:(4) ["ab", "AA", "BB", "CC"]
    

      注意,如果不存在“组匹配符号”,那么重复类仅对其前面的一个字符有效!

      示例代码:

        var regExp=new RegExp('ab{2}','ig');
        var str='abcabc123AABBCC';
        var res=str.match(regExp);
        console.log(res);    //返回结果:["ABB"]
    
        var regExp=new RegExp('(abc){2}','ig');
        var str='abcabc123AABBCC';
        var res=str.match(regExp);
        console.log(res);    //返回结果:["abcabc"]
    

    5.贪婪模式、懒惰模式

      贪婪模式(greed)、懒惰模式(lazy),这两种模式都是被固化至表达式内的两种隐形的检索模式,

      它们不属于任何一种前述的检索模式,而是在此之外隐形生效的。

      贪婪模式,

        正则要求就一直向下匹配,直到无法再匹配为止的行为模式(如 n*)

      懒惰模式,

        一旦匹配到符合正则要求的内容就立即结束检索的行为模式(如 n?)

      在正则中,不同的符号可以隐式说明当前的正则是采用贪婪模式还是懒惰模式。

      常见符号:

        贪婪模式:+、*、{n,}、{n,m}、……

        懒惰模式:+?、?、*?、{n}、{n}?、{n,m}?、……

      代码示例:

        //---贪婪模式---
        var regExp=new RegExp('s[a-z0-9]+s','ig');
        var str='abscabc12S3AeSvBhC2286s96';
        var res=str.match(regExp);
        console.log(res);    //返回值:["scabc12S3AeSvBhC2286s"]
    
        //---懒惰模式---
        var regExp=new RegExp('s[a-z0-9]+?s','ig');
        var str='abscabc12S3AeSvBhC2286s96';
        var res=str.match(regExp);
        console.log(res);    //返回值:["scabc12S", "SvBhC2286s"]
    

    6.脱字符  

      脱字符是正则中“^”符号的一种特殊表达方式,表示“不是……”的意思,

      当且仅当“^”符号出现在中括号的首位时,我们称之为脱字符。

      写在正则主体首位而不是中括号内表示初位字符,写在中括号内却没有写在首位则表示普通字符。

      中括号内只有脱字符时“[^]”,表示所有字符!

      代码示例:

        var regExp=new RegExp('[^bc]+','ig');
        var str='abscabc12S3AeSvBhC2286s96';
        var res=str.match(regExp);
        console.log(res);    //返回结果:["a", "s", "a", "12S3AeSv", "h", "2286s96"]
    

      

  • 相关阅读:
    node.js + expres 的安装
    ubuntu文件夹建立软链接方法
    $.ajax()方法所有参数详解;$.get(),$.post(),$.getJSON(),$.ajax()详解
    与 的区别
    ubuntu卸载软件命令,apt-get remove
    php中session机制的详解
    mysql中查询语句中的一个知识点说明
    Git忽略规则及.gitignore规则不生效的解决办法
    Linux中find常见用法示例
    Waiting for table metadata lock
  • 原文地址:https://www.cnblogs.com/husa/p/13649271.html
Copyright © 2011-2022 走看看