zoukankan      html  css  js  c++  java
  • 初学JavaScript正则表达式(十二)

    text / exec方法

    text()

    var reg1 = /w/;
    
    var reg2 = /w/g;
    
    reg1.test('a')      ===   true        reg2.test('a')      ===   true
    
    reg1.test('a')      ===   true        reg2.test('a')      ===   false
    
    reg1.test('a')      ===   true        reg2.test('a')      ===   true
    
    lastIndex在作怪
    
    while(reg1.test('ab')){
    
        console.log(reg1.lastIndex)     // 0 0 0 0...
    
    }
    
    while(reg2.test('ab')){
    
        console.log(reg2.lastIndex)     // 1 2
    
    }

    解决办法:

    1. (/w/g).test('a') 每次都实例化一个新的规则,但是会增加内存开销,不建议
    2. reg2使用reg1模式,不需要加'g'全文搜索

    exec()

    非全局调用

    1. 调用非全局的RegExp对象的exec()时,返回数组
    2. 第一个元素是与正则表达式相匹配的文本

    3. 第二个元素是与RegExpObject的第一个子表达式相匹配的文本(如果有的话)

    4. 第三个元素是与RegExpObject的第二个子表达式相匹配的文本(如果有的话)

    5. 。。。以此类推

    var reg3 = /d(w)d/;          //非全局
    
    var reg4 = /d(w)d/g;
    
    var ts = '1a2b3c4d5e';
    
    var ret = reg3.exec(ts);        // 匹配到的结果数组 ['1a2','a']
    
    console.log(reg3.lastIndex + '	' + ret.index + '	' + ret.toString());             
    // "0 0 12a,a"        
    //非全局下lastIndex不生效,第二个0代表'第一个匹配结果是从下标为0的位置开始',匹配的结果数组转化为字符串
    
    console.log(reg3.lastIndex + '	' + ret.index + '	' + ret.toString());      // "0 0 12a,a"
    
    while(ret = reg4.exec(ts)){
         console.log(reg4.lastIndex + '	' + ret.index + '	' + ret.toString());         
        //"3  0 1a2,a"      "7  4 3c4,c"
    }

    整理自慕课网教学 点此进入

  • 相关阅读:
    电脑开机慢是查看与解决方案
    做男人真难
    强大的数据恢复软件--EasyRecovery专业版
    30招让你从头到脚都健康
    教您如何使用SQL中的SELECT LIKE like语句
    SQL server经典电子书、工具和视频教程汇总
    数据开发-经典
    C# 数据操作工具类
    关于web请求中 获取真实IP
    生成二维码
  • 原文地址:https://www.cnblogs.com/xue-shuai/p/12000614.html
Copyright © 2011-2022 走看看