第六周第四天笔记

1. 验证正则表达式中的全局g对几种方法的影响

  • test校验方法:正则的方法
    • 总结:1)不添加全局g时,lastIndex值始终是0,所以每次检验匹配时,都是从0开始查找,查找到就返回true,查找不到就返回false;2)添加全局g后,test方法会对lastIndex值进行叠加改变,每检验一次,lastIndex值就改变一次,下次查找的时候从lastIndex值开始查找;
     
    
  • exec方法:正则的方法
    • 总结:1)不添加全局g,每次查找的时候,都是从0开始,reg的lastIndex一直是0;2)正则exec方法中添加g,那么,每使用一次就查找一个,然后以数组的形式输出,每次查找输出后,下次查找的位置通过reg的lastIndex属性值记录住,再次使用exec方法查找时,就从上次结束的地方开始查找;
     
    
  • match方法:字符串的方法
    • 总结:字符串match方法,本质就是查找内容,查找到一个就返回一个数组,数组中有三项;与exec方法获取的相同;
    • 总结:1)当不添加全局g时;match方法相当于exec方法,查找到内容,以一个数组的方式返回,里面有三项;2)当添加全局g时,match方法,就把所有满足reg规则的内容,作为数组元素,返回一个新的数组;
     
    
  • replace方法:字符串的方法
    • 总结:1)字符串replace方法在使用的时候,只要在字符串中只要找到一个被替换的内容,就停止,然后替换掉,返回一个新的字符串;注意:只要找到一个就结束;2)当正则的表达式不添加全局g时,此时就代表查找一次,当使用的时候,只要找到一个,也是停止,只不过是把替换的内容,换成了一个规则,本质没有变化;3)当正则表达式中添加了全局g后,意思是在全局中查找,是查找所有满足正则规则的内容,然后进行全部替换,返回新的字符串;
     
    

2. 字符串的repalce方法与正则配合后的变化

  • 总结:
    • 字符串replace方法,本质就是查找被替换的内容,然后将其替换,返回一个新的字符串,但是需注意的一点是,每次查找只查找一个,只要有一个就停止,然后替换一个,结束,不会同时替换两个满足要求的内容;
    • 不添加全局g,跟上述方法结果一样,仍然只是查找一个,然后替换一个,结束;
    • 添加全局g,改变查找规则,在查找的时候,将满足规则的内容全部查找到,然后全部替换,最后结束;
    • 正则改变的,只是一个规则,不会改变replace的特性,只是改变了查找规则;
    • 实质:字符串原有的replace方法,特性没有改变,只不过是通过添加正则,来改变了查找的规则;由原来的查找一个,改为查找所有,而这个起决定性作用的就是正则,它制定的规则;

3. replace方法中的回调函数

  • 回调函数:把函数的定义阶段作为参数,赋给另外一个函数,这样的函数就叫做回调函数;
  • replace方法中的回调函数:
    • replace方法中的回调函数调用的次数,取决于正则匹配的次数,匹配几次,就调用几次;
    • replace方法,每查找到一次符合正则的内容,就调用一次函数,同时传入当前获取内容的三项参数,其实可看作对内容的所有满足情况的遍历;
    • replace方法中的回调函数会传入实参,传入的内容为exec获得的三项内容值,如1)item:大正则内容(如果有小分组,则第二项为小分组的内容);2)index:每次查找到的内容,开头对应的索引值;3)input:字符串;
     
    
  • 实例1:过滤敏感词,即利用replace方法,将特定的词替换成对应数目的*号;
    • 知识点:replace方法中使用回调函数,获取第一个大正则内容参数;
     
     
     
     
     
     
    
  • 实例2:模板修改
    • 知识点:replace方法中使用回调函数,回调函数中传入的第一项为大正则的内容,第二项为小分组的内容;
     
    
  • 实例3:数字变汉字
     
    
  • 实例4:去除字符串中的空格
     
    
  • 实例5:利用对象不重名的特性来统计字母的重复次数
    • 思路:
      1. 利用对象的不重名特性,统计单词,以及出现的次数
      2. 找到出现最多的次数;假设法
      3. 通过次数找字母
     
    

4. replace方法与exec方法及match方法之间的联系

  • exec方法:目的是捕获满足reg规则的内容,返回一个数组,数组中有三项;每次只能拿到一个满足规则的内容;
  • match方法:目的是查找所有满足reg规则的内容,然后组成一个新的数组,返回;可以拿到全部满足规则的内容;
  • replace方法:目的也是查找所有满足reg规则的内容,进行替换;但是当存在回调函数时;其目的跟match方法很像;每查找到一次,回调函数就执行一次,就传入一次参数,参数值与exec获得的值相同,意思就是对exec进行了多次使用,直到查找完;同时在回调函数中获取的第一项,就是每次查找到的内容,每调用一次回调函数,就是获取match方法获得的数组中的每一项,也就是对match方法获取数组进行一次遍历;

5.RegExp类实例私有属性lastIndex

  • lastIndex属性:正则RegExp类实例的私有属性;
    • 正则表达式中,若不添加全局g,则lastIndex值始终为0,test方法和exec方法不会改变它,每次查找都从0开始查找;
    • 正则表达式中,若添加全局g;则test方法和exec方法,都会对lastIndex值产生影响,lastIndex值记录本次查找到内容后,内容结尾的下一项的索引值,下次再查找时,会继续从lastIndex值开始查找;两种方法混合使用时,会对lastIndex值进行叠加影响;
     
    
    • 实例:
     
    

6.RegExp类静态属性

  • RegExp类静态属性:类作为对象角色,添加的属性,成为对象的私有属性,与实例无关,但是必须在进行test方法或exec方法匹配后,才可以使用$1来获取小分组内容;
     
    

7. 重复子项

  • 定义:重复子项,就是如"\1","\2"等字符,代表的意思是:"\1"指与第一个小分组的样式一样;"\2"指与第二个小分组的样式一样;
      
    
  • 实例:利用重复子项来统计字母的重复次数
    • 思路:
      1. 将str进行排序,按照拼音形式,让重复的字母挨在一起;
      2. 书写正则样式,使用replace方法
    • 知识点:
      • 字符串转数组方法,数组sort方法,数组转回字符串方法;
      • 正则表达式var reg=/(\w)\1+/gi分析:第一位为字母数字下划线,第二位跟第一位相同,"+"代表可以有多个重复的,"g"代表全局搜索多项,"i"代表忽略大小写;
      • replace方法中回调函数的参数
     
    

8. 封装urlParse()方法

  • 需求:封装方法,把链接中传给后台的参数,以一个新对象的形式返回
  • 知识点:
    • 封装方法要封装到所属类的原型上;
    • 正则表达式var reg=/([^?=&]+)=([^?=&]+)/g;解读:"[^?=&]"的含义是除了?,=,&这三个符号,"+"多个,"="必须要有等号;
    • 思路分析:第一,封装方法,this指向字符串实例对象,默认返回值为字符串实例对象;第二,封装函数执行的返回值为对象,所以需要修改构造函数中的返回值;
 

9. 日期格式化封装formatDate()方法

  • 获取日期中的数据:var str="2018-08-22 20:35:56",获取字符串中的数字信息,返回一个数组
    • 严格匹配:
      • 思路:通过正则方法,严格制定捕获规则,通过小分组,单独获取每项信息,然后通过replace中的回调函数获取每项值,但是需要通过call方法来将arguments类数组转化为数组,然后传入参数,截取相应的项;
       
      
    • match方法
      • 思路:制定正则方法,获取所有满足规则的内容;
       
      
    • split方法
      • 思路:制定分离方法,将字符串分割成数组;
       
      
  • 利用日期模板,将日期进行转换;
    • 思路:通过正则表达式中的大正则拿到被替换的内容,通过小分组拿到对应的值,作为数组的索引值,进行替换;
     
    
  • 封装日期格式化formatDate()方法
     
    

10. 知识点积累

10.1 "||"和"&&"的应用

  • 知识点:
    • 代码a || b中,若a为假,返回b;若a为真,返回a;
    • 代码a && b中,若a为真,返回b;若a为假,返回a;
  • 验证:
     
    
  • 实例应用:函数调用时,"||"对实参赋值与否的应用
     
    

10.2 正则只匹配不捕获

  • 知识点:正则表达式中,添加括号会捕获为小分组内容,然后返回在数组中,现在不想捕获小分组内容,小括号的作用只是分组的作用,提高优先级;
  • 代码:var reg1=/tiankong(?:\d+)/指的是匹配(\d+)的内容,不获取小分组的内容;
     
    

10.3 小括号的用法

  • 分组
  • 提高优先级:/^(18|19)$/;验证18或19;
     
    
  • 小分组:匹配和捕获
  • 小分组:只匹配不捕获,小括号中添加?:
     
    
  • 注意:在正则表达式中如果需要使用字符()必须要添加转义符"";
     
    

10.4 中括号的用法

  • 中括号中不会出现两位数;只能出现一个;
     
    
  • 中括号[]里面的字符意义会发生改变,分为两种
    • 如"+","."这些元字符,代表加,小数点;都不用加转义符;但是在其他的时候必须加转义符才能代表加,小数点的意思;
      • 对比1:[+-]指的是+或-,二者任何一个;此时中括号中的+号,不用加转义符,就代表加号的含义;
      • 对比2:(\+|-)指的是+或-,二者任何一个;此时在小括号中的+号需要添加转义符;才代表加号的含义;
    • 如"\w","\s","\d"这些元字符,带斜杠的仍然代表元字符的含义;
    • 中括号和小括号的共同点:是在使用或的时候,功能是一样的;都代表两者其一;
      • 中括号:[ab]指的就是a,b二者中任何一个;
      • 小括号:(a|b)指的也是a,b二者中任何一个;
      • 弊端:当a,b为数字时,必须是一位数时,才能用中括号,如果为两位数,只能用小括号;如[1234]代表的意思是1234四位数中的任何一个数;而(12|34)代表的是12或34;
      • 注意:尽量不要用小括号,因为在exec方法捕获时,会对小括号进行小分组;会导致错乱;可以用?:解决;

10.5 量词元字符"?"问号的用法

  • 0或1:代表可有可无;如有效数字正则表达式中的使用;
    • 如:(\.\d+)?)代表小括号中的数据可有可无;
  • 解决正则查找中的贪婪性:放在正则捕获中的量词元字符后面
    • 如:var reg=/\d+?/g代表捕获数字时,匹配多个数字的内容,但是在输出的时候,只输出一个数字;
  • 只匹配不捕获:用于小分组,在小分组中代码前添加?:;
    • 如:var reg1=/tiankong(?:\d+)/代表的意思是,只匹配到(\d+)内容,但是不会捕获(输出)小分组的内容;

11 回调函数callback

  • 定义:把函数的定义阶段,作为参数,传给另外一个函数,这个函数就叫做回调函数;
  • 知识点:
    • 回调函数中的this,一般为window,可以通过call改变this指向;
    • callback什么时候被调用,以及被调用多少次,取决于father这个函数
    • 回调函数可以传参
    • 回调函数的返回值,以及赋给的函数的返回值,回调函数被调用多次,会有多个返回值,然后放在数组中,以数组形式返回给father函数;
     
    

12 数组forEach方法

  • 定义:数组forEach方法作用是遍历数组实例对象,然后执行多次回调函数,每次给回调函数传入实参;
  • 知识点:
    • forEach方法可以有两个参数:callback,thisArg;(第二个参数是可选的,它是用来改变this指向的);
    • forEach方法中的回调函数,被调用的次数跟数组的长度一样,即遍历数组;
    • 回调函数接收3个参数:item(数组中的每一项) index(索引) input(原始数组);
    • forEach方法本身没有返回值;
    • 第二个参数thisArg,如果不设置,则回调函数中的this一般指向window,如果设置,那么this就指向thisArg值;
    • 兼容性:IE8及其以下浏览器不兼容;
     
    

13 封装浏览器兼容的ForEach方法

  • 知识点:
    • 浏览器兼容与否的判断条件为:判断数组类原型上是否存在forEach属性,用in判断;
    • 封装思路:分析封装方法的作用,是否需要传参数,是否有返回值;
  • 封装思路:
    • 封装方法,封装到所属类的原型上
    • 浏览器兼容时,使用forEach方法,如果浏览器不兼容,那么使用自己封装的方法;
    • 封装方法时,要了解其作用,是否需要参数,是否需要返回值
    • forEach方法的作用就是多次调用回调函数,调用的次数为数组实例对象的长度,如果添加thisArg值,则在调用回调函数时,改变其this指向;
    • forEach方法中,调用回调函数时,会给其传入三个实参,分别是:item数组每一项,index数组对应项的索引值, input原始数组;
    • forEach方法中不需要返回值;
     
    

14 数组map方法

  • 定义:数组map方法代码格式跟forEach方法一样,也是遍历数组,多次调用回调函数,改变回调函数this指向,但是唯一不同的是,map方法有返回值,返回值为一个数组,数组元素为回调函数每次执行后的返回值;
  • 知识点:
    • map方法唯一的不同是,存在返回值,返回值为一个数组,由回调函数每次执行后的返回值组成;
    • map方法的其他特性跟forEach方法一样;
    • map方法:IE8及其以下浏览器不兼容;
     
    

15 封装浏览器兼容的Map方法

  • 知识点:
    • 与forEach方法不同点,map方法具有返回值;
     
    

你可能感兴趣的:(第六周第四天笔记)