zoukankan      html  css  js  c++  java
  • new RegExp / / 正则

    正则(RegExp)

    定义:正确的规则 它是专门来操作(检:检查,索:搜索)(模糊范围的)字符串的一种规则。 
    简写: /规则和字符串(不带引号的字符串)/     /d/ 
    标准写法: new RegExp ( // || 带引号的字符串 , 修饰符 )

        第一个参数:可以放字符串或者正则,注意:如果是字符串形式的元字符,记得要转意。

        第二个参数:修饰符

        一般是遇到 变量或者参数 的时候,用标准写法。

    转义符:   
    可以带任意的符号,只不过有些符号是有特殊含义的

    元字符:(普通元字符:在正则当中,字面量方式创建的,两个斜杠中,除了特殊元字符和量词元字符以外的字符都叫做普通元字符)

    特殊元字符: 
    匹配一个换行符 
    匹配一个回车符 
    f 匹配一个换页符 
    匹配一个制表符 
    v 匹配一个垂直制表符 
    x 
    ……. 
    d :匹配0-9之间的任意一个数字 
    D :除了0-9之间的任意字符 
    w :匹配数字、字母、下划线,中的任意一个字符,[0-9a-zA-Z] 
    W :除了数字,字母,下划线以外的任意字符 
    : 匹配一个边界 ‘box tag’  (文字是没有边界的,比如:你好,中文的感叹号!。)
    B:除了边界以外的其他字符 
    s 匹配任何不可见字符,包括空格、制表符、换页符等等 
    S 匹配任何可见字符 
    . 点 匹配除“ ”和” ”之外的任何单个字符。 
    um 重复子项: 1就代表重复第一个子项(只重复一次)。如果有第二个()子项,那么2就代表重复第二个子项,以此类推。

    量词元字符:

    {} 量词的范围

    {n,m} 最小是n,最大是m,(n,m都是一个非负整数)
    + 至少一个最多不限 {1,} 最小一次,最多无限
    ? 最小没有,最多一次{0,1}
    * 最小没有,最多无限 {0,}
     

    修饰符: 
    g:  global 全局匹配(找整个字符串) 
    i:   ignoreCase=>忽略大小写 
    m: multiline=> 多行匹配 一般是配合 来使用的 
    ^:  从字符串开头进行匹配
    $: 从字符串末尾进行匹配
    [ ]   范围,任意取其一,范围是遵循ascll码走的。例:w => [0-9a-zA-Z]的范围 

      中文的范围:[ u4e00 - u9fa5 ]  (记忆:有事100,有酒罚我)

    [^]   排除 
    ()    将( 和 ) 之间的表达式定义为“组”(group),并且将匹配这个表达式的字符保存到一个临时区域(一个正则表达式中最多可以保存9个),它们可以用 1 到9 的符号来引用。 
    |      将两个匹配条件进行逻辑“或”(or)运算。注意:这个元字符不是所有的软件都支持的。

    正则下的方法:

      1. //.test(字符串)  检验 
        字符串中有没有正则能匹配到的内容,返回值: true false
      2. //.exec(字符串)  捕获 
        方法用于检索字符串中的正则表达式的匹配。 
        返回一个数组,其中存放匹配的结果。如果未找到匹配,则返回值为 null。
      3. str.match(//) -> 把匹配到的字符放入到数组中,不匹配返回null
      4. str.replace( " " | / /(要替换谁)," " | callback(替换成什么))
    callback 回调函数的特性:每匹配到一次就,调用一次函数
     
    ●替换字符串默认的callback参数
    第一个参数:  匹配到的字符
    第二个参数:索引
    第三个参数:整个字符串
    第四个参数开始往后都是:undefined
     
    ●如果有() 子项、分组
    第一个参数:匹配到的字符
    第二个参数之后:对应每一个 子项|分组。
    分组或者子项之后是:索引、整个字符串、undefined
     1   //找到字符串中哪个字母出现的次数最多,出现了几次?
     2   let str = 'dnsasudhusadssasdgsjdgddsjsddhaslfdiusadlhsdsfudahsful';
     3     let n = -Infinity; //负无穷大
     4     let name = '';
     5     let str2 = str.split('').sort().join('');
     6   
     7     str2.replace(/([a-z])1+/g,function($0,$1){ //$0本次匹配的字符,$1,第一个分组
     8         if(n < $0.length){
     9             n = $0.length;
    10             name = $1;
    11         }
    12     });
    13     console.log(n,name);

     

     
    正则的特征: 
    懒惰: 比如让找一个数字,它只会找一次,绝对不会找多次 
    贪婪: 有多少找多少(尽可能的去检索)

     

  • 相关阅读:
    HDU 5492 Find a path
    codeforce gym 100548H The Problem to Make You Happy
    Topcoder SRM 144 Lottery
    codeforce 165E Compatible Numbers
    codeforce gym 100307H Hack Protection
    区间DP总结
    UESTC 1321 柱爷的恋爱 (区间DP)
    HDU 4283 You Are the One (区间DP)
    HDU 2476 String painter (区间DP)
    UESTC 426 Food Delivery (区间DP)
  • 原文地址:https://www.cnblogs.com/MrZhujl/p/9925278.html
Copyright © 2011-2022 走看看