07 JS CORE String API、正则表达式

正课:
1. ***String API
   检索关键词:查找出字符串中包含的敏感词的位置和内容
   替换
   切割字符串
2. *****正则表达式:规定一个字符串中出现规律的表达式

1. 检索关键词: 4种
   1. 查找一个固定的关键词出现的位置:
       var i=str.indexOf("关键词",fromi)
         在str中,从fromi位置开始查找"关键词"的位置
         如果找到,返回关键词所在位置的下标
                找不到,返回-1
         简写: 省略fromi,默认从0开始
       专门找最后一个关键词的位置:
       var i=str.lastIndexOf("关键词")
         在str中,找最后一个关键词出现的位置

      07 JS CORE String API、正则表达式

      07 JS CORE String API、正则表达式

      问题: 只能找第一个关键词
      解决: 正则表达式:

   2. 使用正则表达式查找指定的一类关键词的位置:
       按模式匹配:
       var i=str.search(/正则表达式/);

        如:var i=str.search(/(微|w(ei)?)\s*(信|x(in)?)/);
           在str中查找第一个符合正则表达式要求的关键词的位置
           返回值: 找到的关键词的下标, 如果找不到返回-1
       何时: 仅判断是否包含敏感词时,就用search
                如果返回不是-1,说明包含,否则说明没找到

       正则默认仅匹配第一个
       忽略大小写: /正则/i
       问题: 1. 只能获得第一个的位置,不能获得所有敏感词
                2. 只能返回位置,不能返回内容

         07 JS CORE String API、正则表达式
        

 3. 使用正则表达式查找指定的一类关键词的内容:
        var arr=str.match(/正则/gi);

        查找str中所有符合正则表达式要求的关键词,保存在一个数组中返回
        默认只找第一个,找所有:/g;忽略大小写:/i;
        返回值: 所有敏感词组成的数组
               没找到返回null!
           强调: 如果一个API有可能返回null,就必须先判断不是null,再使用!null的长度立即报错
        arr.length 表示找到的关键词个数,
        问题: 仅返回所有关键词的内容,无法返回每个关键词位置
    4. 即找所有关键词内容,又找每个关键词的位置?
        reg.exec();

***RegExp对象:
    什么是: 封装一条正则表达式, 提供了使用正则表达式进行查找和验证的API
    何时: 1. 查询关键词的第四种情况: 即查内容,又查位置
             2. 利用正则表达式执行验证
    如何:
       创建: 2种:
          1. 如果正则表达式是固定不变的: var reg=/正则/ig;   /\d{2}!/=/\d{2}/
               强调: /正则/中正则中的/都要转义为\/
          2. 如果正则表达式是动态生成的:
               var reg=new RegExp("正则","ig");
               强调: "正则"中的" \ 都要转义为\"  \\
                 比如: "\d{6}" => "\\d{6}"         "==>\"             

    07 JS CORE String API、正则表达式

   07 JS CORE String API、正则表达式

       验证:检查输入的字符串是否符合正则表达式的要求

       var bool=reg.test(str);

        验证str是否满足reg的要求,满足返回true,否则返回false;

         问题:默认只要str中部分满足reg的要求就返回true;

         解决:前面加^,后面加$,完整匹配

        07 JS CORE String API、正则表达式

         07 JS CORE String API、正则表达式

2. 替换: 将字符串中所有敏感词替换为新内容

        1、简单:所有关键词,都替换为统一的内容
                        基本替换:str=str.replace(/正则/gi,“替换值”);

         2、高级:根据不同的关键词,动态替换不同的新值

                          str=str.replace(/正则/,function(kw){});

                           衍生操作:1、删除操作:将找到的字符用空字符代替

                                             2、格式化:1.用正则将原字符串中的内容分组

                                                                2.用replace按新格式重新组合各个分组的内容($n可获得第n个()分组对应的子字符串)

07 JS CORE String API、正则表达式

07 JS CORE String API、正则表达式 

07 JS CORE String API、正则表达式

07 JS CORE String API、正则表达式         07 JS CORE String API、正则表达式

07 JS CORE String API、正则表达式

    07 JS CORE String API、正则表达式
    07 JS CORE String API、正则表达式

    07 JS CORE String API、正则表达式

    07 JS CORE String API、正则表达式

3、切割: 将字符串按照指定的分隔符,分割为多个子字符串

        var subs=str.split(/正则/);

      比如:将邮箱地址切割为用户名和域名 var arr=str.split(/@/);

07 JS CORE String API、正则表达式

07 JS CORE String API、正则表达式

4. *****正则表达式:
   什么是: 专门定义一类字符串统一规则的表达式
   何时: 1. 按照指定规则模糊查找一类关键词时
            2. 表单中验证输入项的格式
   如何: 语法:   
      1. 最简单的正则其实就是关键词原文
      2. 字符集: 规定字符串中一位字符可用的备选字符列表
         何时: 只要某一位字符,有多个备选字时
         如何: [备选字符列表]
           强调: 1、一个字符集只能匹配一位字符

                     2、一个字符集至少匹配一个

           07 JS CORE String API、正则表达式
           简写: 如果备选字符列表是连续的,就可用-省略中间字符

              一位小写字母:[a-z]
              一位字母: [a-zA-Z]
              一位数字: [0-9]
              一位汉字: [\u4e00-\u9fa5]
         特殊: 除了: [^排除的字符列表]
                    强调: ^必须写在[开头]
      3. 预定义字符集: 4个:
          \w  一位字母数字或_  =>[a-zA-Z0-9_]
          \d  一位数字  => [0-9]
          \s  一位空字符: 空格,Tab,...
          .    一位任意字符
        强调: 一个预定义字符集仅匹配一位字符
                 只有规则和预定义字符完全一致时,才能使用
                      如果不一致, 依然需要手写普通字符集
         字符集仅控制每个字符的内容,无法规定字符出现的次数
     4. 量词: 专门固定字符出现的次数
         有明确数量边界:
           字符集{min,max}   规定字符集必须最少出现min次,最多max次
           字符集{min,}   最少min次, 多了不限
           字符集{n}        必须n次
         没有明确数量边界:
           字符集?     可有可无,最多一次
           字符集*     可有可无,多了不限
           字符集+    {1,}
         强调: 仅修改相邻的前一个字符集
     5. 选择和分组:
         分组: 将多个字符集分成一组:
             何时: 如果希望一个量词同时修饰多个字符集时
            比如: 我(了个?)?去: 我去   我了去   我了个去    我个去X
         regexper.com
         选择: 其实就是"或"   规则1|规则2
            只要匹配任意一个规则即可
            (微|w(ei)?)\s*(信|x(in)?)

    6.匹配指定位置:

           字符串开头:^   比如:^\s+  开头的空字符

           字符串结尾:$   比如:\s+$  结尾的空字符

           单词边界:\b  \bno\b 不会找到nothing


     手机号:
         (\+86|0086)?      +86或0086  可有可无,最多一次(\为转义字符)
         \s*                        空字符 可有可无,多了不限
         1
         [34578]               34578中挑一个
         \d{9}                    9位数字
         (\+86|0086)?\s*1[34578]\d{9}
     邮箱:
         字母/数字或_   一次以上
         @
         字母或数字      2位以上
         (.和 字母或数字      2到3位)   1到2次
         \[email protected][a-zA-Z0-9]{2,}(.[a-zA-Z0-9]{2,3}){1,2}
     需求:微信 微 信 weixin wei xin wx w x

                (微|w(ei)?)\s*(信|x(in)?)