javascript正则表达式学习


  • 创建正则对象的方法

    • 自面量

      var reg=/^\d+$/gmi;    
    • 创建RegExp对象【对于转义字符用\】

      var reg=new RegExp('^\\d+$','gmi');
  • RegExp常用的方法和属性
    test和exec方法,可以修改lastIndex属性,该属性表示下一次匹配是的起始位置。
    对于没有全局匹配g:test,exec 方法lastIndex始终为0,即每次都要从头匹配;
    对于有全局匹配g: test,exec方法lastIndex等于上一次匹配后的下一个位置,

    • reg.test(str)
    var reg=/([a-z]+)(#)?(\d)+/;//【无g】
    var str="class#123 class#234 class#456";
    reg.test(str);//true;
    reg.test(str);//true;
    reg.test(str);//true;
    /**...不管匹配多少次,都是从str开头匹配,所以每次都是true**/

    var reg=/([a-z]+)(#)?(\d)+/g;//【有g】
    var str="class#123 class#234 class#456";
    reg.test(str);//true;
    reg.test(str);//true;
    reg.test(str);//true;
    reg.test(str);//false;//【匹配到结尾,没有匹配成功,下次从头开始匹配】
    reg.test(str);//true;
    /**...匹配到结尾后,下一次再从头开始匹配,依次循环**/

  • reg.exec(str)
    var reg=/([a-z]+)(#)?(\d)+/;//【无g】
    var str="class#123 class#234 class#456";
    reg.exec(str);
    //["class#123", "class", "#", "3"]
    [完全匹配字符串,第一个子匹配子符串,第二个子匹配字符串,第三个子匹配字符串,....]
    reg.exec(str);
    //["class#123", "class", "#", "3"]
    /***因为无g,lastIndex=0,每次都从开始匹配,即每次都匹配第一项**/

    var reg=/([a-z]+)(#)?(\d)+/g;//【有g】
    var str="class#123 class#234 class#456";
    /**第一次匹配**/
    reg.exec(str);
    //["class#123", "class", "#", "3"]

    /**第二次匹配**/
    reg.exec(str);
    //["class#234", "class", "#", "4"]

    /**第三次匹配**/
    reg.exec(str);
    //["class#456", "class", "#", "6"]

    /**第四次匹配**/
    reg.exec(str);
    //null//【匹配到结尾,从头开始匹配】

    /**第五次匹配**/
    reg.exec(str);
    //["class#123", "class", "#", "3"]

    /**以上匹配的结果也可以通过RegExp的静态属性获取**/
    RegExp.lastMatch="class#123";//完全匹配项
    RegExp.$1="class";//第一个子选项
    RegExp.$2="#";//第二个子选项
    RegExp.$3="3";//第三个子选项
    RegExp.lastParen="3";//最后一个匹配的子选项
    RegExp.rightContext=" class#234 class#456";//匹配右侧的字符串
    RegExp.leftContext="";//匹配左侧的字符串
  • 字符串与正则表达式
    str.match(reg);
    str.search(reg);
    str.replace(reg);
    str.split(reg);

    1. str.match(reg)
/**非全局匹配,等效于exec非全局匹配**/
    var reg=/([a-z]+)(#)?(\d)+/;//【无g】
    var str="class#123 class#234 class#456";
    /**第一次匹配**/
    str.match(reg);
    //["class#123", "class", "#", "3"]

    /**第n次匹配**/
    str.match(reg);
    //["class#123", "class", "#", "3"]
/**全局匹配,匹配出所有的项**/
    var reg=/([a-z]+)(#)?(\d)+/g;//【有g】
    var str="class#123 class#234 class#456";
    /**第n次匹配**/
    str.match(reg)
    //["class#123", "class#234", "class#456"]
  1. str.search(reg)
    /**search对于全局和非全局匹配都是一样的,匹配到第一个就返回,即全局无效**/
    var reg=/([a-z]+)(#)?(\d)+/g;//【有g】
    var str="class#123 class#234 class#456";
    /**第n次匹配**/
    str.search(reg);
    //结果 0,【总是返回第一个匹配项的index】
  1. str.replace(reg)
    /**非全局匹配,之操作第一项**/
    var reg=/([a-z]+)(#)?(\d)+/;//【无g】
    var str="class#123 class#234 class#456";
    str.replace(reg,"$3$2$1");//【将class#123变成3#class,注意(\d+)与(\d)+匹配的区别】
    //"3#class class#234 class#456"

    /**全局匹配,操作所有项**/
    var reg=/([a-z]+)(#)?(\d)+/g;//【无g】
    var str="class#123 class#234 class#456";
    str.replace(reg,"$3$2$1");//【将class#123变成3#class,注意(\d+)与(\d)+匹配的区别】
    //"3#class 4#class 6#class"
  1. str.split(reg)
/**split对于全局匹配g也是忽略的,有没有结果都是一样**/
    var reg=/([a-z]+)(#)?(\d)+/;//【无g】
    var str="aa class#123 bb class#234 cc class#456 dd";
    str.split(reg);
    //["aa ", "class", "#", "3", " bb ", "class", "#", "4", " cc ", "class", "#", "6", " dd"]
    结果分析:
    /**['第一个分割项','第一个匹配的子选项',
     '第二个分割项','第二个匹配的子选项',
     '第三个分割项','第三个匹配的子选项',
     '第四个分割项'
    ]**/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值