• 正则使用


    匹配字符规则:

      . 通配符,匹配除换行符外的所有字符

      \d 匹配数字,同[0-9]

      \D 非数字

      [a-z] 匹配小写字母

      [A-Z] 匹配大写字母

      \s 匹配任意空白字符

      \S 匹配任意非空白字符,和\s相反

      \w 匹配任意字类字符和_,同[a-zA-Z0-9_]

      \W \w相反

      \b 单词开始和结束位置

      [] 多选匹配,可匹配[]中所有字符

      [^] 不匹配[]中所有字符(如/^[^1]$/.test(1) == false)
      | 或选项,可匹配|之前或之后的部分,配合()限制作用域

      ^ 匹配字符串开头位置

      $ 匹配字符串结束位置,和^一起使用表示精确匹配

    匹配数量规则:

      * 匹配任意数量字符

      + 匹配1到多个字符

      ? 匹配01个字符

      {x,y} 匹配x-y个字符,y不存在时无上限

      {x} 匹配x个字符

    创建方法:

      字面量:包含在//之间,如/\d*/

      通过new生成:new RegExp(‘\d*’);new RegExp(/\d*/) 返回结果也是/\d*/

    匹配模式规则:

      g: 匹配所有字符

      i: 不区分大小写匹配

      u: 识别unicode字符(es6)

      y: 每次匹配会修改lastIndex,导致下次匹配从上次匹配结束位置开始(es6)

    贪婪匹配:

      默认状态就是贪婪匹配,总是匹配尽可能多的字符

      而非贪婪匹配,在之后加一个?,匹配尽可能少的字符

    /\w+/.exec('123ad');    //['123ad']
    /\w+?/.exec('123ad');    //['1']

    正则子作用域:

      使用()可以在正则表达式中添加子作用域,可以修改正则元算符和匹配符的作用范围;

      例:/(az)+/匹配azazaz...而不是azzzzzz

      /a(abc|123)/匹配aabca123而不是aabc123

      保存变量:

      例:/(abc)d/.test(’abcd’)会把abc保存到RegExp.$1

      常用替换字符串特定字符:

    '1234'.replace(/\d/g, '$1s');    //1s2s3s4s

      ps:$1代表第一个匹配到的参数,$2代表第二个。。。依次类推

    正则预查:

      正则中我们可以使用预查来筛选特性的字符,不过比较可惜的是js只支持向后预查

      (?=str)匹配后面跟着str字符串的部分

      (?!str)匹配后面没有str字符串的部分

    '1_2$34a'.replace(/\d(?=[a-z])/g, 'h');    //"1_2$3ha"
    '1_2$34a'.replace(/\d(?![a-z])/g, 'h');    //"h_h$h4a"

    Ps:在进行匹配时,不会吧预查部分内容匹配出来,我们使用replace的时候也不会对预查部分进行替换

    正则方法:

      exec:用正则表达式模式在字符串中查找,并返回该查找结果的第一个值(数组),如果匹配失败,返回null 

      test:返回一个bool值,判断是否满足匹配条件

    /\d/.exec('123456');    //['1']
    /\d/.test('123456');    //true

    字符串方法:

      split :按照参数提供规则切割字符串,返回相应数组,第二个参数可指定数组最大长度

      match:和exec匹配一样,不过匹配所有的值返回
      
    search:返回匹配值的位置

      replace:

        替换匹配到的字符串,第二个参数字符串时:

          $$插入一个$

          $&插入匹配的子串

          $`插入匹配子串左侧内容

          $’插入匹配子串右侧内容

          $n插入匹配到的第n个子串

        如果第二个参数是function:

          第一个参数是匹配字符

          2-n:相当于$n

          倒数第二个参数:偏移量

          最后一个参数:源字符串

    '123456'.match(/\d/g);    //["1", "2", "3", "4", "5", "6"]
    'a123456'.search(/\d/);    //1
    '192.168.1.1'.replace(/\d+/g, 'a');    //"a.a.a.a"
    '192.168.1.1'.replace(/(\d+)/g, '$1a');    //"192a.168a.1a.1a"
    '192.168.1.1'.replace(/(\d+)/g, (arg) => arg + 'a');    //"192a.168a.1a.1a"
    '192.168.1.1'.replace(/(\d+)/g, (arg, arg1) => arg1 + 'a');    
    //"192a.168a.1a.1a"
    '1 2 3 4'.split(' ');    //["1", "2", "3", "4"]
    '1 2 3 4'.split(' ', 2);    //["1", "2"]
    '1 2 3 4'.split(' ', 10);    //["1", "2", "3", "4"]

    最后,写一个关于ipv4地址的正则匹配规则:

    0-255.0-255.0-255.0-255

    每个数字都是0-255

    正则表达式:/(25[0-5]|2[1-4]\d|1\d{2}|[1-9]\d|\d)/

    25[0-5]匹配250-255之间数字

    2[14]\d匹配200-249之间数字

    1\d{2}匹配100-199之间数字

    [1-9]\d匹配10-99之间数字

    \d匹配0-9之间数字

    然后我们重复组装:

    /^((25[0-5]|2[1-4]\d|1\d{2}|[1-9]\d|\d)\.){3}(25[0-5]|2[1-4]\d|1\d{2}|[1-9]\d|\d)$/

    至此就算匹配成功

  • 相关阅读:
    React Native基础&入门教程:以一个To Do List小例子,看props和state
    Xamarin 学习笔记
    网站HTTP升级HTTPS完全配置手册
    Xamarin 学习笔记
    Xamarin 学习笔记
    React Native基础&入门教程:初步使用Flexbox布局
    SpreadJS使用进阶指南
    用WijmoJS搭建您的前端Web应用 —— React
    【图解】FlexGrid Explorer 全功能问世
    只用最适合的!全面对比主流 .NET 报表控件
  • 原文地址:https://www.cnblogs.com/timmer/p/6689255.html
Copyright © 2020-2023  润新知