JavaScript 正则表达式 什么是捕获?

100 阅读3分钟

正则表达式 捕获

            所谓的捕获 是 获取字符串中 符合 正则表达式规范的内容

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

            执行结果
                在捕获查找时 如果 字符串内容 没有符合正则表达式的字符
                    执行结果是 null

                如果 字符串内容 包含符合正则表达式的字符
                    执行结果是 带有 字符串键名的数组
                        
                            符合正则表达式规范的内容
                            默认只获取第一个符合的内容
                !   多次执行 捕获的都是 第一个符合的内容

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

            / /g  全局匹配

            一般跟 死循环配合使用 获取字符串中所有符合的内容生成一个新数组

                !   多次执行 
                    第一次 从 字符串起始位置开始 获取 第一个符合正则表达式规范的内容
                    之后再执行捕获 是 从上一次捕获结束位置开始 获取下一个符合正则表达式规范的内容
                    多次捕获 每次 都是从上一次结束的位置开始 获取下一个符合正则表达式规范的内容

                    直到捕获结果是 null 也就是 没有符合正则表达式规范的内容
                    再执行捕获 再次从 字符串起始位置开始 执行 捕获效果



            

先看一下~

    // let str = 'abc1234def456ghi789jklmn' ;

    // //  从开头到结尾 只能是 3位数字
    // let reg1 = /^\d{3}$/ ;

    // //  捕获结果
    // //  没有符合正则表达式的内容 结果 是 null
    // console.log( reg1.exec( str ) );



    // //  只要包含 3位 数字就行
    // let reg2 = /\d{3}/ ;

    // //  捕获结果
    // //  每次捕获的结果 都是 符合 正则表达式语法规范的内容
    // //  默认都是捕获第一个符合的规范的内容
    // console.log( reg2.exec( str ) );
    // console.log( reg2.exec( str ) );
    // console.log( reg2.exec( str ) );
    // console.log( reg2.exec( str ) );
    // console.log( reg2.exec( str ) );


    // //  只要包含 3位 数字就行
    // //  添加 / /g 全局匹配 
    // let reg3 = /\d{3}/g ;

    // // 第一次执行 获取第一个符合内容的字符串
    // console.log( reg3.exec( str ) );

    // // 第二次执行 获取第二个符合内容的字符串
    // console.log( reg3.exec( str ) );

    // // 第三次执行 获取第三个符合内容的字符串
    // console.log( reg3.exec( str ) );

    // // 第四次执行 获取第四个符合内容的字符串
    // // 字符串中 只有 3个 符合 正则表达式的字符串内容
    // // 第四 捕获结果是 null
   


    // abc1234def456ghi789jklmn
    // 第一次捕获 是 从 abc123  中 获取 123
    // 第二次捕获 是 从 4def456 中 获取 456
    // 第三次捕获 是 从 ghi789  中 获取 789
    // 第四次捕获 是 从 jklmn   中 获取 null
    // 第五次捕获 是 从 字符串起始 开始 再次捕获


    //  捕获字符串中 所有符合内容的字符

    let str = 'abc1234def456ghi789jklmn' ;

    //  创建一个空数组
    const arr = [] ;

    //  定义正则表达式
    let reg = /\d{3}/g ;

    //  定义 死循环 
    while( true ){
        
        // 执行 正则表达式 捕获
        let res = reg.exec( str );
        console.log( res );


        // 如果 捕获结果是 null 没有匹配内容 终止写入 终止循环
        if( res === null ) break ;

        // 如果捕获结果 不是 null 
        // 索引下标 0 存储的是 符合正则规范的内容 写入 空数组中
        arr.push( res[0] );

    }

    console.log( arr );