正则表达式的学习笔记

正则体验

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

    //把下面字符串当中所有数字找到
    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\n\r\t\v]
    \S 任何一个非空白字符,等价于[^\f\n\r\t\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
posted @ 2018-09-17 15:06  山村码农  阅读(151)  评论(0编辑  收藏  举报