JavaScript - 正则表达式

正则:也叫规则,让计算机能够读懂人类的规则,都是操作字符串,也是系统对象

正则默认行为:正则匹配成功就会结束匹配;

如果想要全部查找,就要加标识g(全局匹配)

| 一个竖杠在正则当中表示或

   let re = /a/ ;//正则简写 简写性能比全称性能好 一般会被浏览器认为是注释 所以会在里面填东西
    let re2 = new RegExp('a');//正则全称 但是有的情况下只能用全称 当正则需要传参的时候,正则只能用全称
    let re3 = new RegExp('\\b'+Class+'\\b'); //当特殊字符想要输出的时候在前面再加一个\


   * test
   *    字符串判断
   *    1).返回值为布尔值
   *    2).用法:正则.test(字符串)
   *    3).列子是否有不是数字的字符
   *
   * search
   *    字符串搜索
   *    1).返回出现的位置
   *    2).用法:字符串.search(正则)
   *    3).忽略大小写:i - ignore
   *    正则默认区分大小写
   *match
   *    获取匹配的项目
   *    1).返回数组
   *    2).量词:+ 至少含有一个(一个或多个)
   *    3).全局匹配:g - global
   *    4).用法:字符串.match(正则)
   *
   * replace
   *    替换所有匹配
   *    1).返回替换后的字符串
   *    2).字符串.replace(正则,想要替换的)
   *    3).敏感词过滤
   *
   *    4).匹配子项
   *        日期格式化
   *
 

通过转义字符 可以区分数据类型 用于正则判断
   /*
   * 转义字符:
   * \s:空格
   * \S:费空格
   * \d:数字
   * \D:非数字
   * \w:字符 (字母,数字,下划线)
   * \W:非字符
   *
   *
   * */

 /*
   * search:
   *
   *    概念:正则去匹配字符串,如果匹配成功,就返回匹配成功的位置,
   *    如果匹配失败就返回 -1;
   * */
    let str = "sdfgwsfg";
    let re = /df/;
    let re2 = /D/;
    let re3 = /D/i;//在末尾斜杠后面添加i>>>>i - ignore 能够忽略大小写
    //全称写法
   let re4 = new RegExp('D','i');//在里面i作为第二个参数
    console.log(str.search(re));//返回的是第一个字符的位置
    console.log(str.search(re2));//正则默认区分大小写
    console.log(str.search(re3));
    console.log(str.search(re4));
    //可以添加规则忽略大小写
 /*
   * match:
   *
   *    概念:正则去匹配字符串,如果匹配成功,就返回匹配成功的数组,
   *    如果匹配失败就返回 null;
   *
   * */
    let str = "32432sdfg1wsfg13213";
    let re = /\d+/g;// 在里面//写几个就标识匹配几个
   //量词:匹配不确定的位置 写在你想要匹配的类型后面
   //+:至少出现一次
    console.log(str.match(re));
    //正则默认行为:正则匹配成功就会结束匹配 这里就返回一个3
   //如果想要全部查找,就要加标识g(全局匹配)
/*
   * replace:
   *
   *    概念:正则去匹配字符串,匹配成功的字符去替换成新的字符串
       * replace第二个参数可以使字符串,也可以是回调函数,
       * 其中函数的第一个参数就是匹配成功的字符
       *  函数第一个参数就是母亲(正则整体) 第二个参数就是第一个子项以此类推
   * */
    let str = "32432sdfg1wsfg13213";
    let re = /fg+/g;

    str = str.replace(re,"zz");
    console.log(str);
/*
   * 字符类:一组相似的元素 []中括号的整体代表一个字符表示可以出现里面的任意一个值
   *
   * 任意字符:
   *    [abc]
   * 范围:
   * [a-z]、[0-9]
   *
   * 排除(不包括)^写在[]里面表示排除
   * [^a]
   * */

   //[]中填写任意字符
   let str = "abc";
   let re = /a[dbw]c/;//a 第一位 [bdc]第二位 c第三位 第二位中只需要字符串中第二位满足其中一个就正确
   console.log(re.test(str));
    //[^]排除不想要的字符
   let str2 = "abc";
   let re2 = /a[^bdc]c/;//字符串第二位要满足不能有b、d、c这三个字符
   console.log(re2.test(str2));//false
    //[a-z] [val1-val2]规定想要的范围

    let str3 = "asd22r_ASDASDDD12WWsdwdqw";
    let re3 = /([a-z]|[0-9])+/gi;
    let re4 = /[a-z0-9A-Z]+/g;
    str3.replace(re3,(items)=>{
        console.log("res3>>>"+items);
   });
   str3.replace(re4,(items)=>{
       console.log(`re4>>>${items}`);
   })
/*
   * 匹配子项:
   *        用小扩号()代表  同时小括号还有分组操作的作用
   *        把正则的整体叫做(母亲)
   *        然后把左边第一个小括号里面的正则,叫做这个第一个子项(母亲的第一个孩子)
   * */
   let str = '2018-8-16';
   //let re = /-+/g;
   //let re = /\d+-/g;//数字可以出现多次
   //let re = /\d-+/g;//-可以出现多次
   let re= /(\d+)(-)/g;//通过分组数字和-都可以出现多次 但是格式和分组里面一样
   str = str.replace(re,(items,item1,item2)=>{//函数第一个参数就是母亲(正则整体) 第二个参数就是第一个子项以此类推
       //计算规则,必须在满足母亲的情况下子项再到母亲中去满足
       console.log(item1);
      // return "/";

       return item1+"/"
   });
    alert(str);

    //在match的使用匹配子项
    let str2 = "abc";
    let re2 = /(a)(b)(c)/;
    console.log(str2.match(re2));/*必须在正则不是全局的情况下可以获得子项的集合*/

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值