zoukankan      html  css  js  c++  java
  • 26 正则表达式

    RegExp
    
    为什么
    	匹配我们想要的字符串
    是什么:
      匹配字符串的规则
    怎么创建正则表达式	
      第一种方式是直接通过/正则表达式/写出来,
      第二种方式是通过new RegExp('正则表达式')创建一个RegExp对象
      var re1 = /ABC-001/;
      var re2 = new RegExp('ABC\-001');//因为字符串的转义问题,字符串的两个\实际上是一个,字符串中的反斜杠有特殊含义
    
      re.test('010-12345'); // true RegExp对象的test()方法用于测试给定的字符串是否符合条件。
    要做更精确地匹配,可以用[]表示范围
      用逗号切分字符串
        'a,b;; c d'.split(/[s\,;]+/); // ['a', 'b', 'c', 'd'] s表示空格 
      分组
        用()表示的就是要提取的分组(Group)
        如果正则表达式中定义了组,就可以在RegExp对象上用exec()方法提取出子串来
        var re = /^(d{3})-(d{3,8})$/;
        re.exec('010-12345'); // ['010-12345', '010', '12345']
        exec()方法在匹配成功后,会返回一个Array,第一个元素是正则表达式匹配到的整个字符串,后面的字符串表示匹配成功的子串。
        exec()方法在匹配失败时返回null
    
    贪婪匹配
      正则匹配默认是贪婪匹配,也就是匹配尽可能多的字符
      必须让d+采用非贪婪匹配(也就是尽可能少匹配),才能把后面的0匹配出来,加个?就可以让d+采用非贪婪匹配
    
    
    全局搜索
      为什么
        正常情况,正则只匹配一次,如果要匹配多次,需要用全局搜索
      怎么做到全局搜索
        最常用的是g,表示全局匹配
      var s = 'JavaScript, VBScript, JScript and ECMAScript';
      var re=/[a-zA-Z]+Script/g;
    
      // 使用全局匹配:
      re.exec(s); // ['JavaScript']
      re.lastIndex; // 10
    
      re.exec(s); // ['VBScript']
      re.lastIndex; // 20
        全局匹配可以多次执行exec()方法来搜索一个匹配的字符串。
        当我们指定g标志后,每次运行exec(),正则表达式本身会更新lastIndex属性,表示上次匹配到的最后索引
        全局匹配类似搜索,因此不能使用/^...$/,那样只会最多匹配一次
        正则表达式还可以指定i标志,表示忽略大小写,m标志,表示执行多行匹配。
    
    正则表达式
      regExp
        RegExp 对象有 3 个方法:test()、exec() 以及 compile()。
        var patt1=new RegExp("e");
        patt1.test("The best things in life are free")//test() 方法检索字符串中的指定值。返回值是 true 或 false。
        document.write(patt1.exec("The best things in life are free")); //exec() 方法检索字符串中的指定值。返回值是被找到的值。如果没有发现匹配,则返回 null。
    
        var patt1=new RegExp("e");
        document.write(patt1.test("The best things in life are free"));
        patt1.compile("d");//compile() 方法用于改变 RegExp。compile() 既可以改变检索模式,也可以添加或删除第二个参数。
        document.write(patt1.test("The best things in life are free"));特殊元字符
    
       d 0~9任意一个数字
      D 非0~9之间的任意字符
      w 字母、数字或下划线 [a-zA-Z0-9_]
      W 非......
      s 匹配任意一个空白字符 (包括制表符)
        匹配边界符 "hello-world" 
      
     匹配一个换行符
       转义字符 . 只表示一个小数点
      . 表示除了
    之外的任意字符
      ^ 以某个字符开头
      $ 以某个字符结尾
      a|b a或者b任意一个 
      [158] [abc] a或b或c任意一个
      [^abc] 除了ac之外的
      [a-z] 表示a到z中任意一个字母 [0-9]等价于d
      [^a-z]
      () 分组
      (?:) 当前分组只匹配不捕获
    
    量词元字符
      *出现零到多次 等价于 {0,}
      ? 出现零到一次 等价于 {0,1}
      + 出现一次到多次 等价于 {1,}
      {m} 出现m次
       {m,} 出现至少m次
       {m,n} 出现m~n次 
    
    * 修饰符 i ignoreCase 忽略大小写
    * g global 全局匹配
    * m multiline 多行匹配 
    * 
    */
    
    
    // 正则定义 var arr = [] 或var arr = new Array()
    // 1 正则字面量 
    var reg = /d123/g;
    console.log(typeof reg);
    // 2 new创建
    var reg2 = new RegExp("\d","g");
    console.log(reg2);
    

      

  • 相关阅读:
    裂项相消
    斜率和问题
    抛物线与椭圆
    数列通项
    双曲线离心率
    优化问题
    单调性讨论
    角平分线
    隐零点
    自动任务调度系统
  • 原文地址:https://www.cnblogs.com/xuanjian-91/p/10267803.html
Copyright © 2011-2022 走看看