• JavaScript 【引用类型】RegExp类型


    以下为学习《JavaScript 高级程序设计》》(第 3 版) 所做笔记。

    目录:

      1、创建正则表达式

      2、RegExp 实例属性

      3、RegExp 实例方法

      4、RegExp 构造函数属性 

    创建正则表达式

    1. 以字面量形式创建正则表达式

    var expression = / pattern / flags;

    pattern 部分是正则表达式。flags部分是标志,用以标明正则表达式的行为,正则表达式的匹配模式支持3个标志(gim)。

     1 <script>
     2     //g
     3     //表示全局模式
     4     //模式将被应用于字符串,而非发现第一个匹配项就停止。
     5     var pattern1 = /at/g;   //匹配字符串中所有"at"的实例
     6     //i
     7     //表示不区分大小写
     8     //在确定匹配模式时忽略模式和字符串的大小写
     9     var pattern2 = /[bc]at/i;   //匹配第一个"bat"或"cat",不区分大小写
    10     var pattern3 = /.at/gi;     //匹配字符串中所有以"at"结尾的3个字符的组合,不区分大小写
    11     //m
    12     //表示多行模式
    13     //在到达一行文本末尾时还会继续查找下一行中是否存在与模式匹配的项
    14 </script>

    在模式 pattern 中如果想要匹配元字符,需要对元字符进行转义。正则表达式中元字符有:( [ { ^ $ | ) ? * + . }

    1 <script>
    2     var pattern1 = /[bc]at/i;     //匹配第一个"bat"或"cat",不区分大小写
    3     var pattern2 = /[bc]at/i;   //匹配第一个"[bc]at",不区分大小写
    4 </script>

    2. 使用 RegExp 构造函数创建正则表达式

    RegExp 构造函数接收的第一个参数为模式 pattern, 第二个参数为标志 flags。

    1 <script>
    2     var pattern = new RegExp( "[bc]at", "i" );
    3 </script>

    在模式 pattern 中如果想要匹配元字符,需要对元字符进行双重转义。例如字面量形式的模式  /w\hello\123/  等同于 RegExp 构造函数的模式参数 " \w\\hello\\123 "。

    3.使用字面量形式创建正则表达式与使用 RegExp 构造函数创建正则表达式的区别

     使用正则表达式字面量必须像直接调用 RegExp 构造函数一样,每次都创建 RegExp 实例。在循环体中,使用字面量形式创建正则表达式实际上只会创建一个实例,不会每次循环都创建一个新实例,比如说第二次循环调用就是从上一次匹配的末尾开始的,不会从头开始匹配。

    RegExp 实例属性

    RegExp 的每个实例都有以下属性:global、ignoreCase、lastIndex、multiline、source

     1 <script>
     2     var pattern = /[bc]at/i;
     3     var pattern2 = new RegExp( "\[bc\]at", "i" );
     4     //global
     5     //布尔值
     6     //表示是否设置了 g 标志
     7     console.log( pattern.global );      //输出:false
     8     console.log( pattern2.global );     //输出:false
     9     //ignoreCase
    10     //布尔值
    11     //表示是否设置了 i 标志
    12     console.log( pattern.ignoreCase );   //输出:true
    13     console.log( pattern2.ignoreCase );  //输出:true
    14     //lastIndex
    15     //整数
    16     //表示开始搜索下一个匹配项的字符位置,从0算起
    17     console.log( pattern.lastIndex );    //输出:0
    18     console.log( pattern2.lastIndex );   //输出:0
    19     //multiline 
    20     //布尔值
    21     //表示是否设置了 m 标志
    22     console.log( pattern.multiline );    //输出:false
    23     console.log( pattern2.multiline );   //输出:false
    24     //source
    25     //正则表达式的字符串表示
    26     //按照字面量形式而非传入够早函数的字符串模式返回
    27     console.log( pattern.source );      //输出:[bc]at
    28     console.log( pattern2.source );     //输出:[bc]at
    29 </script>

    RegExp 实例方法

       exec()  

     1 <script>
     2     var text = "mom and dad and baby";
     3     var pattern = /mom( and dad( and baby)?)?/gi;
     4     //lastIndex
     5     //lastIndex 属性用于规定下次匹配的起始位置
     6     console.log( pattern.lastIndex );   //输出:0
     7     //exec()
     8     //接收1个参数:要应用正则表达式的字符串
     9     //有匹配项,则返回一个包含第一个匹配项的数组
    10     //无匹配项,则返回 null
    11     var matches = pattern.exec(text);
    12     //index
    13     //index是使用exec()方法后返回的数组的属性
    14     //表示匹配项在数组中的位置
    15     console.log( matches.index );   //输出:0
    16     //input
    17     //input是使用exec()方法后返回的数组的属性
    18     //表示应用正则表达式的字符串
    19     console.log( matches.input );   //输出:mom and dad and baby
    20     //数组第一项:与整个模式匹配的字符串
    21     console.log( matches[0] );      //输出:mom and dad and baby
    22     //数组其它项:与模式中的捕获组匹配的字符串
    23     console.log( matches[1] );      //输出: and dad and baby
    24     console.log( matches[2] );      //输出: and baby 
    25 
    26     var text = "cat, bat, sat, fat";
    27     //模式不是全局模式,每次调用 exec()返回的都是第一个匹配项,lastIndex始终不变
    28     var pattern = /.at/;
    29     var matches = pattern.exec( text );
    30     console.log( matches.index );       //输出:0
    31     console.log( matches[0] );          //输出:cat
    32     console.log( pattern.lastIndex );   //输出:0
    33     mathces = pattern.exec( text );
    34     console.log( matches.index );       //输出:0
    35     console.log( mathces[0] );          //输出:cat
    36     console.log( pattern.lastIndex );   //输出:0
    37     //模式是全局模式,每次调用exec()都会返回字符串的下一个匹配项,lastIndex在每次调用exec()后都会变化
    38     var pattern = /.at/g;
    39     var matches = pattern.exec( text );
    40     console.log( matches.index );       //输出:0
    41     console.log( matches[0] );          //输出:cat
    42     console.log( pattern.lastIndex );   //输出:3
    43     mathces = pattern.exec( text );
    44     console.log( matches.index );       //输出:0
    45     console.log( mathces[0] );          //输出:bat
    46     console.log( pattern.lastIndex );   //输出:8
    47 </script>

      test()  

     1 <script charset="utf-8">
     2     var text = "000-00-0000";
     3     var pattern = /d{3}-d{2}-d{4}/;
     4     //test()
     5     //接受1个字符串参数。在模式与该参数匹配的情况下返回 true
     6     //经常用于验证用户输入
     7     if( pattern.test( text ) ){
     8         console.log( "匹配" );          //输出:匹配
     9     }
    10 
    11     //RegExp实例继承的 toLocaleString()toString() 方法都会返回正则表达式的字面量,与创建正则表达式的方式无关。
    12     var pattern = new RegExp( "\[bc\]at", "gi" );
    13     console.log( pattern.toString() );          //输出:/[bc]at/gi
    14     console.log( pattern.toLocaleString() );    //输出:/[bc]at/gi
    15 </script>

    RegExp 构造函数属性

     1 <script>
     2     var text = "Today is a happy day.";
     3     var pattern = /(.)app/g;
     4     var pattern2 = /(..)a(.)p(.)/g;
     5 
     6     if( pattern.test( text ) ){
     7         //input : 最近一次要匹配的字符串
     8         //$_ 等同于 input
     9         console.log( RegExp.input );        //输出:Today is a happy day.
    10         console.log( RegExp["$_"] );        //输出:Today is a happy day.
    11         //lastMarch : 最近一次匹配项
    12         //$& 等同于 lastMarch
    13         console.log( RegExp.lastMatch );    //输出:happ
    14         console.log( RegExp["$&"] );        //输出:happ
    15         //lastParen :最近一次捕获组
    16         //$+ 等同于 lastParen
    17         console.log( RegExp.lastParen );    //输出:h
    18         console.log( RegExp["$+"] );        //输出:h
    19         //leftContext : input字符串中 lastMarch 之前的文本
    20         //$` 等同于 leftContext
    21         console.log( RegExp.leftContext );  //输出:Today is a 
    22         console.log( RegExp["$`"] );        //输出:Today is a 
    23         //rightContext : input字符串 lastMarch 之后的文本
    24         //$' 等同于 rightContext
    25         console.log( RegExp.rightContext ); //输出:y day.
    26         console.log( RegExp["$'"] );        //输出:y day.
    27         //multiline : 布尔值,表示是否所有表达式都是用多行模式
    28         //$* 等同于 multiline
    29         console.log( RegExp.multiline );
    30         console.log( RegExp["$*"] );        
    31     }
    32     
    33     //RegExp.$1、RegExp.$2......RegExp.$9 分别用于存储第一、第二。。。。。。第九个匹配的捕获组
    34     if( pattern2.test(text) ){
    35         console.log( RegExp.$1 );   //输出: h
    36         console.log( RegExp.$2 );   //输出:p
    37         console.log( RegExp.$3 );   //输出:y
    38         console.log( RegExp.$4 );   //输出:( 空字符串 )
    39     }
    40 </script>
  • 相关阅读:
    华为云招募工业智能领域合作伙伴,强力扶持+商业变现
    “不敢去怀疑代码,又不得不怀疑代码”记一次网络请求超时分析
    详解openGauss多线程架构启动过程
    站在数字化风口,工装企业如何“飞起来”
    如何化解35岁危机?华为云数据库首席架构师20年技术经验分享
    解读2022年度敏捷教练行业现状报告
    理论+案例,带你掌握Angular依赖注入模式的应用
    机器学习实践:基于支持向量机算法对鸢尾花进行分类
    8种桌面IDE CodeArts智能代码补全类型
    【CVPR2022】用于域适应语义分割的域无关先验
  • 原文地址:https://www.cnblogs.com/xiaoxuStudy/p/12381016.html
Copyright © 2020-2023  润新知