javascript笔记(五)(正则表达式)

正课:
1. ***String
  截取子字符串
  ***查找关键字:
  ***替换
  ***分隔
2. *****正则表达式:
1. ***String:
截取子字符串:3种:
  1. str.slice(starti,endi+1)
     用法同数组的slice:
      1. 含头不含尾
      2. 支持负数参数
      3. 省略第二个参数,表示截到结尾
  2. str.substring(starti,endi+1)
     特点: 1. 含头不含尾
           2.省略第二个参数,表示截到结尾
     不同: 不支持负数参数
       如果使用倒数第n位,就用length-n
  3. str.substr(starti,n)
     从starti开始,截n个,不用考虑含头不含尾


***查找关键词:4种:
1. 查找一个固定的关键词的位置:
   var i=str.indexOf("关键词",fromi);
   在str中从fromi位置开始,找下一个"关键词"所在的位置。
   返回值: 
     如果找到,返回关键词第一个字符的下标位置
     如果没找到,返回-1
   特殊: 省略fromi表示,从0位置开始。
   强调: indexOf每次只找fromi只有的下*一个*关键词。
     解决:用循环,反复调用indexOf
           每次都将fromi改为当前位置之后
            直到返回-1结束
   var i=str.lastIndexOf("关键词",fromi);
   在str中从fromi位置开始,找前一个"关键词"所在的位置。
   返回值:同indexOf
   特殊: 省略fromi表示,从length-1开始。
  何时使用:只要查找一个固定的关键词的位置
  问题: 无法使用模式匹配的方式查找关键词


2.判断是否包含关键词:(支持正则)
   




*****正则表达式:
  什么是正则表达式:
    描述一个字符串中,字符出现规律的规则
  为什么: 可以使用模式进行模糊匹配
  何时使用: 查找,替换,切割,验证
  如何使用:
   1.最简单的正则,就是关键词原文
   2.字符集:
     规定*一位*字符可用的备选字符列表
     何时使用: 
只要某*一位*字符,有多个备选时
     如何使用:[备选字符的列表]
     强调:1个字符集,默认只能匹配一位字符
     简写:如果字符集中的字符,部分unicode连续,可用-省略中间的字符
     比如: 1位数字:[0-9]
           1位小写字母:[a-z]
           1位字母:[A-Za-z]
           1位汉字:[\u4e00-\u9fa5]
     如果表示除了xxx之外:
      [^xxx]
   3.预定义字符集:
     对常用字符集的简化:
     1位数字: \d => [0-9]
  1位字母数字或下划线: \w => [0-9A-Za-z_]
     1位空字符: \s => 空格,换行,制表符
     1位任意字符: . => 除回车换行外的一切
     何时使用: 
       如果需求和预定义字符集完全匹配,才能使用。
       如果需求和预定义字符集不匹配,就必须使用普通字符集
   4.量词:规定一个字符集出现次数的规则
    有明确数量限制: 
     字符集{min,max} 字符集最少出现min次,最多不能超过max次
     字符集{min,} 字符集最少出现min次,多了不限!
     字符集{n} 字符集必须n个
    没有明确数量限制:
     ?  可有可无,最多1个
     *  可有可无,多了不限
     +  至少1个,多了不限

   5.选择和分组
     选择: 或  
      正则1|正则2 表示只要和任意一个正则匹配,就符合规则。
     分组: ()划分子表达式
       何时使用: 
   手机号:
     +86或0086 可有可无,最多1次
     空字符  可有可无,多了不限
     1
     34578中选一个
     9位数字
   (\+86|0086)?\s*1[34578]\d{9}

   https://regexper.com/

正课:
1.*****正则表达式
2.***String
 查找关键词
 替换
 分隔


1. *****正则表达式:
  1.关键词的原文就是最简单的正则表达式
  2.字符集
  3.预定义字符集
    \d  \w   \s   .
  4.量词:
    {min,max} {min,} {n}
    ?   *   +
  5.选择和分组:
    |    ()
  6.匹配指定位置:
    ^字符串开始位置:
      ^xxx读作"以xxx开头"或开头的xxx
      强调: ^放在正则的开头,表示字符串的开始位置。
            ^放在字符集[]内部的开头,表示除了xxx。
    $字符串结束位置
      xxx$读作"以xxx结尾"或结尾的xxx
    强调: 如果同时前加^,后加$,表示必须从头到尾完整匹配。——验证
     如果不加^和$,只要部分匹配就验证通过
    
    单词边界: \b 开头,结尾,空字符,标点
      \b单词\b


    密码强度:预判 排除法
    至少包含一位大写字母以及一位数字
    1. 预判: 不都是小写字母和数字组成
      说明至少包含一位大写字母或其他字符
      (?![a-z0-9]+$)
    2. 预判: 不都是字母组成
      说明至少包含一位数字或其他字符
      (?![A-Za-z]+$)
    3. 正则: 只能又字母和数字组成
       排除了之前,其他字符的可能
       [A-Za-z0-9]{8,10}
^(?![a-z0-9]+$)(?![A-Za-z]+$)[A-Za-z0-9]{8,10}$


2.***String
***查找关键词:4种
1.查找一个固定关键词的位置:
  var i=str.indexOf("关键词",fromi);
  var i=str.lastIndexOf("关键词",fromi);
  问题: 不支持正则
2.判断是否包含和正则表达式匹配的关键词
  var index=str.search(/正则/i);
    在str中查找第一个和正则匹配的关键词的位置。
    说明: 第二个/后+i,表示忽略大小写
        不加,默认区分大小写
    强调: search永远只能返回第一个关键词的位置。
      不能返回关键词的内容,也无法获得之后更多的关键词。
      所以,只能判断有没有。  
    返回值: 如果找到,返回关键词的位置
            如果没找到,返回-1
   问题: 永远只能找第一个且无法获得关键词的准确内容。
3.获取所有关键词的内容: 
  var kwords=str.match(/正则/ig);
   获取str中所有和正则匹配的关键词,将所有关键词内容,保存在结果数组kwords中
   说明:g 表示全部。
       如果不加g,默认只查找第一个
   如果没找到,返回null!
   今后,都要先判断是不是null,再进一步操作。
   如果不加g: 将完整关键词放在数组的第0个元素。同时为数组添加index属性,标记关键词的位置。
       如果正则中包含分组,还会将每个分组匹配的子内容,分别放在数组的后续元素中。
   问题: 只能获得内容,无法获得每个关键词的位置。
4. 即可获得每个关键词的内容,又可获得每个关键词的位置: reg.exec()


***替换:
   str=str.replace(/正则/ig,"替换值")
    将str中所有和正则匹配的关键词都替换为"替换值",将生成的新字符串,再存回str中
   高级替换:
   str=str.replace(/正则/ig,
function(kword){
      return "替换值";
        }
   );
   依次找到str中每个和正则匹配的关键词,传给函数的kword参数。函数内根据本次找到的关键词,计算出不同的替换值。replace会将函数返回的替换值,替换到字符串。
   如果需要部分替换关键词:
    1.将正则表达式分组:
    2.从函数的第二个参数开始,依次获得每次匹配的关键词的分组内容。
    str=str.replace(/正则/ig,
function(kword,$1,$2,...){
      return "替换值";
        }
    );


 衍生: 删除: 其实就是将关键词替换成""
       格式化: 2步:
         1.用正则将要格式化的字符串分组
         2.在replace的第二个参数中,用$n代替第n个分组的子内容,拼接格式。


分隔: 将str按照指定的分隔符,分割为多个子字符串。
  var subs=str.split("分隔符");
           str.split(/正则/);
  固定套路:
    1.将字符串打散为字符数组: 
      var chars=str.split("");
    2.按指定字符分隔:
      var subs=str.split("分隔符");
    3.将页面元素的内容,转化为数组
































评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值