美文网首页
javascript正则总结

javascript正则总结

作者: 阿那悟空 | 来源:发表于2018-08-13 14:27 被阅读0次

    正则中的小九九


    正则也用了很多了,而真正自己写的正则到真是寥寥无几呀,不是粘贴复制,就是粘贴复制修改,有时候对于一些正则还不是很理解匹配的过程,觉得这作为程序员最基本的知识还是应该自己写一下正则比较好,所以重新又看了一下正则,做一下记录,以备以后自己复习和使用;

    正则主要是用于操作字符串

    1. 作用:

      1. 验证字符串是不是合法
      2. 查找符合制定特征的字符串
      3. 替换字符串
    2. 前提知识点:

      1. 零宽度:子表达式匹配的仅仅是个位置,或者匹配的内容并不保存到最终的匹配结果中,就认为这个子表达式是零宽的,(其实就是表达式匹配的开始位置和结束位置是一个位置);如:"^ $ (?=xxx) (?!=xxx)"
      2. 占有字符:子表达式匹配的是字符内容不是位置,并保存在最后的匹配结果中
          var reg = /abc/; 可以认为/a/ /b/ /c/ 都是子表达式
      
    3. 表达式

      1. 申明方式:

        1. 构造函数:
              var reg1 = new RegExp("xyz",'gi');
              //参数一:正则内容
              //参数二:修饰符;
                  // i:不区分大小写;
                  // g:全局匹配;
                  // m:多行匹配,遇到换行符也不结束,匹配到到字符串结束;
          
        2. 字面量:
              var reg = /xyz/gi;
          
      2. 方法:

        1. reg.test() //返回true|false
              var reg = /zyx/i;
              var str="zyxaa"
              reg.test(str) // true;
          
        2. exec方法、compile方法 可以自行了解
        3. 其他使用的都是字符串的方法,不是正则方法;
      3. 匹配多字符

      表达式 匹配范围 占位 表达式 匹配范围
      \d 任意一个数字,0~9 中的任意一个 \D匹配取非 \W \w 任意一个字母或数字或下划线
      \s 任意一个数字,0~9 中的任意一个 \B匹配位置(\b 取非的位置) \b 匹配一个单词边界,一个位置:(其中一边是 "\w" 范围,另一边是 非"\w" 的范围)
      . 除了换行符(\n)以外的任意一个字符 [^12A-Z]取补集 [12A-Z] 匹配中括号中的任意一个1或2或A到Z的字符
      ^ 匹配开始位置,不匹配任何字符 $ 匹配结束位置
      两边表达式是或的关系 () 子表达式开始和结束的位置
      1. 次数修饰
      表达式 匹配范围 占位 表达式 匹配范围
      {n} 重复n次 {m,} 重复至少m次数
      {m,n} 重复次数在[m,n]这个范围 ? 重复0到1次 相当于{0,1}
      + 重复次数大于等于1 相当于{1,} * 重复任意次数 相当于{0,}
    4. 匹配过程:

      1. 对于整个表达式来说,一般是从字符串位置0处开始尝试,中间有回溯等一些处理,如何匹配成功则返回,接着从成功之后的位置接着匹配,如何失败,就从位置1重新开始之前的匹配,以此类推,直到成功或者是匹配失败;
      2. 对于子表达式来说: 开始匹配的位置是上一个表达式匹配成功结束的位置;
      3. 例如下面匹配:


        reg0.jpg
    5. 正则表达式一些特殊的用法

      1. 匹配次数的贪婪与非贪婪

        1. 贪婪模式:正则默认情况是贪婪模式:在可以让整个表达式匹配成功的前提下,尽可能最多的去匹配字符串

          reg1.jpg
        2. 非贪婪匹配:在匹配次数修饰符({m,n}/?+*)之后加上"?" 则在可以让整个表达式匹配成功的前提下,尽可能少的去匹配字符串;


          reg2.jpg
      2. 捕获组的引用:

        1. 括号"( )"在正则中括号的作用(起到分组的效果):
          1. 在被修饰匹配次数的时候,括号中的表达式可以作为整体被修饰;
          2. 取匹配结果的时候,括号中的表达式匹配到的内容可以被单独得到;
        2. 捕获组 : 就是把正则表达式中子表达式(括号中的表达式)匹配的内容,保存到内存中以数字编号或显式命名的组里,方便后面引用。
        3. 引用:可以在正则表达式内部引用\number (反向引用), 也可以在正则表达式外部引用$number
          1. 引用number是和子表达式左侧括号出现的顺序相对应的
          2. 括号 "( )" 内的子表达式,如果希望匹配结果不进行记录供以后使用,可以使用 "(?:xxxxx)" 格式
        reg03.jpg
      3. 正则断言(正向、负向、先行、后行)

        js中不支持后行断言,所以只介绍先行:

        1. (?=pattern) 正向先行断言
          //代表字符串中的一个位置,紧接该位置之后的字符序列能够匹配pattern。
        2. (?!pattern) 负向先行断言
          //代表字符串中的一个位置,紧接该位置之后的字符序列不能匹配pattern。
        reg4.jpg
    1. 常用正则:
      1. 只允许字母数字下划线,必须含有大小写和数字和下划线
          var reg=/^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*\_)\w{8,20}$/;
      

    相关文章

      网友评论

          本文标题:javascript正则总结

          本文链接:https://www.haomeiwen.com/subject/khqubftx.html