zoukankan      html  css  js  c++  java
  • 正则表达式的学习笔记

    正则体验

    在字符串中找到数据的数字

        //把下面字符串当中所有数字找到
        var str = 'adsfas12dfasdfcvxsfd232hggdgfsfdgsdg3453sdgsfdgfdsgsfdf454gsdfggs';
        
        // 方法一,循环遍历字符串获取匹配的数字
            function getNum(str) {
                var arr = [];
                var tem = "";
                for(var i=0,len=str.length;i<len;i++){
                    var ch = str.charAt(i); // charAt() 返回字符串中的n个字符
                    if(ch >= 0){
                        tem += ch;
                    }else {
                        if(tem){
                            arr.push(tem);
                            tem= "";
                        }
                    }
                }
                return arr;
            }
            var num = getNum(str)
            console.log(num.join('-')); //  12-232-3453-454
    
        // 方法二,正则表达式
            var reg = /d+/g; //  //: 正则的实例化方式; d:数字,+:一个或者多个; g: 全局匹配
            // match(regexp)方法; 将检索字符串string,以找到一个或多个与regexp匹配的文本,返回一个数组
            // 这个方法的行为很大程度上依赖于regexp是否具有性质g。
            console.log(str.match(reg).join('-')); //  12-232-3453-454
    
    

    使用正则一行代码搞定。


    正则语法

    // 实例化
     var reg = //;
      var reg = new RegExp();
    // =================================
    
    //  d 表示匹配数字
    //  + 表示至少匹配一个 
    //  g 表示全局匹配
    //  i 表示不区别大小写,正则默认是区分大小写
    
         var str = 'aa11bb22cc33dd44';
         console.log(str.match(/d/)); // ["1", index: 2, input: "aa11bb22cc33dd44", groups: undefined]
         console.log(str.match(/d+/)); // ["11", index: 2, input: "aa11bb22cc33dd44", groups: undefined]
         console.log(str.match(/d+/g)); //  ["11", "22", "33", "44"]
    
         var str2 = "javascript Java";
         console.log(str2.match(/java/)); // ["java", index: 0, input: "javascript Java", groups: undefined]
         console.log(str2.match(/java/g)); // ["java"]
         console.log(str2.match(/java/gi)); //  ["java", "Java"]
    
    
         //通过RegExp new出来的正则实例对象 ,传入的参数中的  需要转义 \
        var reg3 = /d+/g;  // reg3 等价于 reg 4  常用方式
        var reg4 = new RegExp('\d+','g'); // reg3 等价于 reg4
        var str3 = "qq234df34er";
        console.log(str3.match(reg3)); //["234", "34"]
        console.log(str3.match(reg4)); // ["234", "34"]
    
    
    

    正则相关的api

    
        /*
        正则相关的API
        test 用来验证字符串是否符合特定的规则,匹配返回true;否则返回false;
        exec() //用于检索字符串中的正则表达式的匹配
        参数:要检索的字符串
        返回值:一个数组,存放的是匹配的结果。如果没有找到匹配,值为null。
                数组的格式:第0个元素就是与表达式相匹配的文本
                           第1个元素是与regexp的第一个子表达式相匹配的文本(如果存在)。
                           第2个元素是与regexp的第二个子表达式相匹配的文本,以此类推。
                           数组的length属性声明的是数组中的元素个数。
                           index属性声明的是匹配文本的第一个字符的位置
                           input属性指的就是string
                           非全局模式调用RegExp对象的exec()方法时,返回的数组与调用方法String.match()返回的方法相同
        */
    
        /*
        字符串相关的API
        1、search()返回第一个与正则相匹配的子串的起始位置。如果没有找到任何匹配的子串,则返回-1。
        2、split()把字符串分割为字符串数组。
        3、match()找到一个或多个正则表达式的匹配。
        4、replace()替换与正则表达式匹配的子串。
        */
    
        var str = "hello 123";
        var str1 = "hello hi";
        var reg = /d+/g; // +号也可以写成 {2,8} 表示 2 到8位
        
        console.log(reg.test(str)); // true
        console.log(reg.test(str1));// false
    
    //     字符串相关的API ======================
    //   search() 的用法
         var reg2 = /javascript/;
         var reg3 = /Javascript/; // 默认区分大小写
         var reg4 = /javascript/i; // i 不区分大小写
         var reg5 = /javascript222/;
         var str2 = "hello javascript,this is Javascript!";
        console.log(str2.search(reg2)); // 6
        console.log(str2.search(reg3)); // 25
        console.log(str2.search(reg4)); // 6
        console.log(str2.search(reg5)); // -1
        // --------------------------------------------------------------------------------------
    // split() 的用法
    
         var str3 = 'zhangsan;lisi;wangwu';
         var str4 = 'zhangsan123lisi4256wangwu1zhaoliu';
         var arr = str3.split(';');
         console.log(arr); // ["zhangsan", "lisi", "wangwu"]
    
         var reg6 = /d+/g
         var arr2 = str4.split(reg6); // 用数字来做为分割的条件
        console.log(arr2); // ["zhangsan", "lisi", "wangwu", "zhaoliu"]
    
        
        //--------------------------------------------------------------
        // match()方法的使用
         var str5 = 'good good study day day up';
         var reg = /good/;
         var arr3 = str5.match(reg);
         //非全局匹配
         //第一项表示匹配到的数据;index表示匹配到的数据的索引;input表示整个字符串
         console.log(arr3);//["good", index: 0, input: "good good study day day up"]
         //全局匹配
         var reg7 = /good/g;
         console.log(str5.match(reg7));//["good", "good"]
        //-----------------------------------------------------
        //replace() 的用法,替换字符串
        var str6="Visit Microsoft! Tom Tom"
        var reg8 = /Microsoft/;
        var reg9 = /Tom/g;
        //把符合第一个参数规则的字符串替换成第二个参数
        console.log(str6.replace(reg8, "W3School")); // Visit W3School! Tom Tom
        console.log(str6.replace(reg9, "Jerry")); // Visit Microsoft! Jerry Jerry
    
        // 不用正则它只替换第一个,后面就不管了
        console.log(str6.replace('Tom', "Jerry")); //Visit Microsoft! Jerry Tom
        //-----------------------------------------------------
    
        var name = "Doe, John";
        //w表示任意的单词字符;
        //+表示一个或者多个
        //s表示空格
        //*零个或者多个
        //小括号什么意思?分组(子表达式)
        var reg = /(w+)s*, s*(w+)/;  //$1 $2 .....
        console.log(name.replace(reg, "$2 $1"));// John Doe  交换两个子表达式所匹配的内容
    
    

    转义字符

    
        /*
        转义字符:
        d 任何一个数字字符,等价于[0-9]
        D 任何一个非数字字符,等价于[^0-9]
        w 任何一个字母数字或下划线字符,等价于[0-9a-zA-Z_]
        W 任何一个非字母数字和下划线字符,等价于[^0-9a-zA-Z_]
        s 任何一个空白字符,包括换页符、换行符、回车符、制表符和垂直制表符,等价于[f
    
    	v]
        S 任何一个非空白字符,等价于[^f
    
    	v]
    
    
        ^表示以什么开始
        $表示以什么结束
        */
    
        //量词 + * ? {m,n}
        //+匹配一次或者多次
        //*匹配零次或者多次
        //?匹配零次或者1次
        //用来控制匹配的数量
    
          var reg = /[0-9]{2}/; // 表示0到9中的最少有一个
          var reg2 = /d/;
          var str = '11';
    //    console.log(reg.test(str)); // true
    //    console.log(reg2.test(str)); // true
        // --------------
        console.log(/[0-9]/.test(str)); // true 表示0到9中的任意一个数字
        console.log(/[0-9]+/.test(str)); // true 表示0到9中的至少有一个数字
        console.log(/[0-9]{1}/.test(str)); // true 表示0到9中的至少有一个数字
        console.log(/[0-9]{3}/.test(str)); // false 表示0到9中的至少有3个数字
        console.log(/[0-9]+/.test(str)); // true
    
  • 相关阅读:
    windows 按时自动化任务
    Linux libusb 安装及简单使用
    Linux 交换eth0和eth1
    I.MX6 GPS JNI HAL register init hacking
    I.MX6 Android mmm convenient to use
    I.MX6 GPS Android HAL Framework 调试
    Android GPS GPSBasics project hacking
    Python windows serial
    【JAVA】别特注意,POI中getLastRowNum() 和getLastCellNum()的区别
    freemarker跳出循环
  • 原文地址:https://www.cnblogs.com/ybixian/p/9662256.html
Copyright © 2011-2022 走看看