zoukankan      html  css  js  c++  java
  • 正则捕获的细节及replace分析

      1.var reg=/./与var reg=/./的区别?

      前者代表任意一个字符,

      后者代表这个字符串中得有一个点

      2.?的使用

      如果单独的一个字符后面带?

      代表1个或0个这个字符的出现;  列如: /d?/

      如果量词+后面带?  取消正则的贪婪性  在捕获的阶段

      3.捕获:

      1.普通捕获  正则的方法exec()  字符串的方法match()

        普通捕获有懒惰性:

        给正则添加一个修饰符g,可以解决;

        match是将所有捕获的内容放在一个数组中,并返回,match就是exec()对函数的简单封装

      2.分组捕获:还是正则的方法exec() 字符串的方法match()

        只不过正则结构发生了变化加()     (分两种捕获,全局和非全局)

      非全局  var reg=/(a)(b)/  exec()和match()在非全局下分组捕获相同的,分组捕获在捕获的过程中,即捕获大正则的内容,也捕获分组中的内容,并返回

      全局   var reg=/(a)(b)/g  exec()和match()在全局下的分组捕获是不一样的,exec()不变,但是match()只捕获到大正则的内容:

      3.分组的优势:

        1.可以提升优先级

        2.可以捕获引用

      捕获引用:

        1  代表分组1里面的内容:

        2  带标分组2里面的内容:

      分组必须在引用前,如果分组引用在分组前,就是普通的表达式// ???  

      案例:/((a)(b))/  第一组:先捕获大()  第二组:在捕获小()  第三组:在捕获小()  总结:分组捕获:先捕获大(),在捕获小()

      分组的结果存在正则(RegExp)的$number属性下:

      1和RegExp.$1二者,都是分组引用;

      1只能使用,在正则表达式里面,RegExp.$1可以外面使用,都是在捕获完成的条件下:

      4.在捕获的过程中,怎样取消捕获分组内:

        在分组的前面加上?:就ok了

        ?:和?=的区别:

          ?:  取消捕获分组的内容

          ?=  案例    var reg=/a(?=b)/  捕获字符a后面紧跟着b,只返回a

      replace细说:

        replace是字符串的一个方法,他又两个参数,用后者将前者替换掉,并返回新的字符串:

        不会改变原来的字符串;

      1.如果第一个参数是字符串,只改变一次:

      2.如果第一个参数是正则:捕获一次,改变一次:

      字符串案例:var st="hello123hello456";

           var ss=st.replace("hello","world");

           console.log(ss)  返回的结果为:world123hello456

      正则的案例:var st="hello123hello456";

            var reg=/hello/g

            var ss=st.replace(reg,"world")

            console.log(ss)  结果为: world123world456

      3.如果第二个参数是匿名函数,每次捕获1次,这个匿名函数就会执行1次:

        案例:var st="hello123hello456";

           var reg=/hello/g;

           var ss=st.replace(reg,function(){

              return "world"           (这个匿名函数有三个参数,0:"world"要替换的,1:从哪开始,2:"hello123hello456"  原字符串)

            })

           console.log(ss)    返回的结果为:world123world456

      如果以后想知道对象有几个参数就是用:console.log(arguments)

      return是什么就会返回什么,没有return就是undefined;

      

      

  • 相关阅读:
    windows server 2008 R2下如何快速开启远程桌面、1433、telnet
    利用Lambda获取类中属性名称
    EntityFramework之迁移操作(五)
    EntityFramework之多对多关系(四)
    EntityFramework之一对多关系(三)
    EntityFramework之一对一关系(二)
    EntityFramework之创建数据库及基本操作(一)
    Javascript短路表达式
    Javascript中call、apply函数浅析
    Javascript"怪异"现象
  • 原文地址:https://www.cnblogs.com/shangjun6/p/10145204.html
Copyright © 2011-2022 走看看