《JavaScript高级程序设计 (第3版)》学习笔记13:chapter_5 - 4 RegExp类型

这是第13篇学习笔记!
让学习“上瘾”,成为更好的自己!

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>RegExp_type</title>
    <script>
    
    /*
    一,创建一个正则表达式对象:
    1,方法一:字面量
        var expression = /pattern / flags;
    
        模式:任何简单或复杂的正则表达式,可以包含字符类、限定符、分组、向前查找和反向引用
        标志:每个正则表达式可以1个或者多个标志,用以表明正则表达式的行为【g,i,m】
            g:全局模式
            i:不区分大小写模式
            m:多行模式
    
    模式中的元字符都必须被转义!

    2,方法二:RegExp()构造函数
         var pattern1 = new RegExp('[bc]at','i');  // 两个参数都是字符串
    模式中的元字符都必须被“双重转义”!
    普通字符串  --> 正 则表达式字符串
        '\'   -->  '\\'
        '\\'  -->  '\\\\'
    【规律】:乘以2!

    【注意】正则表达式字面量和RegExp()构造函数创建的正则表达式不一样!
                正则表达式字面量始终共享同一个RegExp()实例
                使用构造函数创建的每个新RegExp实例都是一个新的实例


     二,RegExp实例属性
        global,igoreCase,multiline:布尔值
        lastIndex:表示开始搜索下一个匹配项的字符位置,从0算起
        source:正则表达式的字符串表示



    三,RegExp实例方法
        exec():接收一个要应用模式的字符串,然后返回包含第一个匹配项信息的数组实例;没有匹配项时返回null
                数组实例包含两个属性:index --> 匹配项在字符串中的位置
                                    input --> 应用正则表达式的字符串
        test(): 接收一个字符串参数,在模式与该参数匹配的情况下返回true,否则,返回false
            常用于if()语句
        toLocaleString(),toString():返回正则表达式的字面量
        valueOf():返回正则表达式本身(与字面量看起来一样)


     四,RegExp构造函数属性(常用6个)长属性&短属性
            “最近一次”:
                input
                lastParen
                lastMatch
            “input字符串”:
                leftContext
                rightContext
            “布尔值”:
                multiline
            9个用于存储捕获组的构造函数的属性,RegExp.$1,RegExp.$2,...,RegExp.$9



    
    
    */
    // 创建一个正则表达式

    // var pattern2 = /\[bc\]at/i;  // 匹配第一个“[bc]at”,不区分大小写
    
    // var pattern1 = /[bc]at/i;  // 匹配第一个‘bat’ or ‘cat’,不区分大小写
    // //=========等价书写==========
    // var pattern1 = new RegExp('[bc]at','i');
    
    // var pattern2 = new RegExp('\\[bc\\]at','i');
    // console.log('fdsdnfsdf');
    // console.log('fdsd\fsdf');


    // var re = null,
    //     i;
    // for(i=0;i < 10;i++){
    //     re = /cat/g;   // 字面量为‘/cat/g’,循环体只为/cat/创建了一个RegExp实例
    //     re.test('catastrophe');

    // }

    // for(i=0;i < 10;i++){
    //     re = new RegExp('cat','g');
    //     re.test('catastrophe');

    // }
    // ECMAScript 5明确规定,使用正则表达式字面量必须向直接调用RegExp()构造函数一样,每次都创建一个新的RegExp实例

    // 实例属性
        // var pattern1 = /\[bc\]at/g;
        // var pattern2 = new RegExp('\\[bc\\]at','g');
        // console.log(pattern1.ignoreCase);
        // console.log(pattern1.source);
        // console.log(pattern2.source);
        //【注意】source属性始终返回字面量形式所用的字符串

        
        // var test = 'mom and dad and baby';
        // var pattern3 = /mom( and dad( and baby)?)?/gi;  // 包含两个捕获组
        // var matches = pattern3.exec(test);
        // console.log(typeof matches);
        // console.log(matches.index);
        // console.log(matches.input);
        // console.log(matches[0]);  // 'mom and dad and baby'
        // console.log(matches[1]);  // ' and dad and baby'
        // console.log(matches[2]);  // ' and baby'
        // 数组中,第一项是与整个模式匹配的字符串,然后由外向内,依次匹配(如果模式没有捕获组,则该数组只包含一项)

        // 对于exec()方法:
        //    1, 是否设置全局标志(g),结果都始终返回一个匹配项
        //    2, 不设置全局标志(g),在同一字符串多次调用exec()将始终返回第一个匹配项的信息
        //    3, 设置全局标志(g),每次调用exec()都会在字符串中继续查找新的匹配项

        // var text = 'cat, bat, sat, fat';
        // var pa = /.at/;   // 匹配所有以'at'结尾的3个字符的组合

        // var matches = pa.exec(text);
        // console.log(matches.index);
        // console.log(matches[0]);  // cat
        // console.log(pa.lastIndex);  // 0

        // matches = pa.exec(text);
        // console.log(matches.index);
        // console.log(matches[0]);  // cat
        // console.log(pa.lastIndex);   // 0

        // -------------------
        // var pa2 = /.at/g;

        // matches = pa2.exec(text);
        // console.log(matches.index);  // 0
        // console.log(matches[0]);  // cat
        // console.log(pa2.lastIndex);  // 3

        // matches = pa2.exec(text);
        // console.log(matches.index);  // 5
        // console.log(matches[0]); // bat
        // console.log(pa2.lastIndex);  // 8
        // 在全局匹配模式下,lastIndex的值在每次调用exec()后都会增加,而在非全局模式下则始终不变

        // test():常用来验证用户输入

        // var text = '000-00-0000';
        // var pattern = /\d{3}-\d{2}-\d{4}/g;
        // if(pattern.test(text)){
        //     alert('this pattern was matched!');
        // }

        // console.log(pattern.toString());
        // console.log(pattern.toLocaleString());
        // console.log(pattern.valueOf());

        // var pattern1 = new RegExp('\\d{3}-\\d{2}-\\d{4}','gi');
        // console.log(pattern1.toString());
        // console.log(pattern1.toLocaleString());
        // console.log(pattern1.valueOf());

        
        // 构造函数的属性


        // var text = 'this is a short summer';
        // var pattern = /(.)hort/g;
        // if(pattern.test(text)){
        //     console.log(RegExp.input);  // this is a short summer
        //     console.log(RegExp.lastMatch);  // short
        //     console.log(RegExp.lastParen);  // s
        //     console.log(RegExp.leftContext);  // 'this is a '
        //     console.log(RegExp.rightContext);  // ' summer'


        // }
        // var pattern2 = /(.)hor(.)/g;
        // if(pattern2.test(text)){
        //     console.log(RegExp.$1);
        //     console.log(RegExp.$2);
        //     console.log(RegExp.$3);
        // }
     
   
        console.log(typeof (/[bc]at/i));


    </script>
</head>
<body>
    
</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值