正则表达式中的lastIndex属性和compile方法

正则表达式中的lastIndex属性,这个属性用于规定下次匹配的起始位置。

如果是 exec() 或 test() 方法匹配,每次匹配之后这个lastIndex的值都是0,也就是每次都从头开始匹配

function reg(num){
            var a = /(\d{4})(\d{2})/;
            
            var b=a.test(num);
            console.log('b',b);  // true
            console.log('lastIndex',a.lastIndex);  // 0

            var c=a.test(num);
            console.log('c',c); // true
            console.log('lastIndex',a.lastIndex); // 0

            var d=a.test(num);
            console.log('d',d); // true
            console.log('lastIndex',a.lastIndex); // 0
        }
        reg('199709a199801');

但是如果正则表达式是全局匹配,也就是加了g参数,这个lastIndex的值就是匹配成功之后的下一次开始匹配的位置。当方法 exec() 或 test() 再也找不到可以匹配的文本时,它们会自动把 lastIndex 属性重置为 0。

function reg(num){
            var a = /(\d{4})(\d{2})/;
            
            var b=a.test(num);
            console.log('b',b);  // true
            console.log('lastIndex',a.lastIndex);  // 6

            var c=a.test(num);
            console.log('c',c); // true
            console.log('lastIndex',a.lastIndex); // 13

            var d=a.test(num);
            console.log('d',d); // false
            console.log('lastIndex',a.lastIndex); // 0
        }
        reg('199709a199801');

而compile()方法就是使正则表达式是全局匹配,也就是加了g参数,这个lastIndex的值都一直是0。

function reg(num){
            var a = /(\d{4})(\d{2})/;
            a.compile();
            
            var b=a.test(num);
            console.log('b',b);  // true
            console.log('lastIndex',a.lastIndex);  // 0

            var c=a.test(num);
            console.log('c',c); // true
            console.log('lastIndex',a.lastIndex); // 0

            var d=a.test(num);
            console.log('d',d); // true
            console.log('lastIndex',a.lastIndex); // 0
        }
        reg('199709a199801');

注意:compile()方法已经是不推荐使用的了,因为我们可以通过a.lastIndex=0的方式来修改下一次开始匹配的位置,lastIndex是一个可读性属性来的。加上compile()方法原来的用法是创建一个正则表达式,和构造函数效果是一样的所以准备要被停止支持了。
详细可以去看MDN文档里明确说明,点击打开MDN文档。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值