zoukankan      html  css  js  c++  java
  • 正则的理解

      元字符、量词的合写   

       /d+/  至少有一个数字

      在字符串中查找与正则匹配的字符;

      n+案例 

      var st="heoollo"

      var reg=/o+/g  在字符串中至少有一个o

      console.log(st.match(reg)) 结果为["oo","o"]

      n*案例

      var st="heoollo";

      var reg=/o*/g  在字符串中匹配包含0个或多个o

      console.log(st.match(reg))  结果为["","","oo","","","o"];

      显然这不是我们想要的结果;

      所以另一种写法:在前面添加相邻的字母 

      案例

      var st="heloollo"

      var reg=/lo*/g  匹配 l 之后带0个或多个0的字符

      console.log(st.match(reg))  结果为["loo","l","lo"]

      n?

      var st="hellohlool"

      var reg=/lo?/g  包含 l 之后带0个或1个o的字符

      console.log(st.match(reg))  结果为["l","lo","lo","l"];

      n{x}  x个n

      var st="helloohoo"

      var reg=/lo{2}/g  翻译为:var reg=/loo/g

      console.log(st.match(reg));  结果为["loo"]

      ?=n  指定一个后面必须跟着n的字符串,返回结果不带n,使用过程中加()

      var st="hellohho"

      var reg=/h(?=o)/g  全局匹配找一个h后面找o的h

      console.log(st.match(reg));  结果为["h"]

      /ln+/  l后面至少有一个n;

      /ln*/  l后面有0个或多个n;

      /ln?/  l后面有0个或1个n;

      /l(?=n)/  l后面紧跟着n,返回的是l,如果l后面没有n,返回的是null;

      正则RegExp(类)

      概念:用来检验字符串的规则;

      定义:通过这两种方法定义一个正则;

        1.var reg=/格式/

        2.var reg=new RegExp

      其本质都是一个对象

      方法:

        1.test()  匹配的方法

        2.exec()  捕获的方法

      修饰符: i  m  g

      [ ]

      元字符:

      量词  (详情见上一章)

      正则的理解:

      1.正则的懒惰性:

      2.正则的贪婪性;

      懒惰性;

        每一次在exec()中捕获的时候,只捕获第一次匹配的内容,而不往下捕获了,我们把这种方式叫正则的懒惰性;

      捕获开始的位置都是从0开始;

      解决正则的懒惰性

        修饰符:g 全局匹配;

      案例:  

        var st="hello45612world12345"

        var reg=/d+/g

        console.log(reg.exec(st));  结果为:45612  这就是正则的懒惰性,每次只输出第一次匹配上的

        console.log(reg.exec(st));  结果为:12345  再次输出的话,就发现他捕获的位置从第一次输出后就开始捕获,不再从零捕获(正是因为g的全局捕获)

        正则的实例对象reg有一个lastlndex的属性,捕获的起始位置;

        如何将捕获的内容汇聚在一起:

        console.log(st.match(reg));  利用字符换中match的方法即可

      正则的贪婪性:

        正则每次捕获都是按照最长的结果,我们把这种功能叫正则的贪婪性;

      案例:

        var st="hello12345"

        var reg=/d+/g;

        console.log(reg.exec(st));  结果为["12345"]  只捕获到最长的数字 不会是1,或1,2直接就是1,2,3,4,5

      怎样处理正则的贪婪性:

        在元字符量词的后面加?

        案例:

        var st="hello456121245"

        var reg=/d+?/g

        console.log(st.match(reg))

      分组捕获,正则里面带(),就是分组捕获;

      /(a)(b)/  解析:外面一个大正则,里面带了两个小正则;     (先算())

      分组捕获的优点:1.可以改变优先级;

              2.可以分组引用;

      分组引用1,2  1代表和第一个分组出现的一模一样,2和第二个分组出现的一模一样

      在数分组的个数时,从左往右;

      /(a)(b)/      (分组也是一个整体)

      第一组:(ab)

      第二组:(a)      

      第三组:(b)

      案例:

        var reg=/(w)1(w)2/

        var st="ssdd";

        console.log(reg.test(reg))  只有这样才会返回true

      案例二:

        var reg=/(a)1(b)2/

        var st="aabb"

        console.log(reg.test(reg))  只用这样才会返回true

        解析这种写法的意思:

          第一个是分组,且是一个单词字符,第二个是个分组引用,要求和第一组一模一样,第三个是第二个分组且是一个单词字符,第四个是一个分组引用,要求和第二组一模一样

      分组捕获:

        分组捕获的前提是正则存在分组,不仅把大正则的内容捕获到把小正则的内容捕获到;

        案例:

          var st="absd";

          var reg=/(a)(b)/;

          console.log(reg.exec(st))  结果为["ab","a","b"]

      怎么解除分组捕获,如果你不想捕获某一个分组的内容,在分组前面加一个?:就可以了;

        案例:

          var st="absd";

          var reg=/(a)(?:b)/

          console.log(reg.exec(st))  结果为["ab","a"]

  • 相关阅读:
    suse12安装详解
    Centos7上部署openstack mitaka配置详解(将疑难点都进行划分)
    菜鸟帮你跳过openstack配置过程中的坑[文末新添加福利]
    openstack中dashboard页面RuntimeError: Unable to create a new session key. It is likely that the cache is unavailable.
    Multiple network matches found for name 'selfservice', use an ID to be more specific.报错
    查看 SELinux状态及关闭SELinux
    SELinux深入理解
    IP地址、子网掩码、网络号、主机号、网络地址、主机地址
    Oracle job procedure 存储过程定时任务
    POI文件导出至EXCEL,并弹出下载框
  • 原文地址:https://www.cnblogs.com/shangjun6/p/10139333.html
Copyright © 2011-2022 走看看