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中,找最后一个关键词出现的位置

     

     

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

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

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

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

        
        

 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}"         "==>\"             

   

   

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

       var bool=reg.test(str);

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

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

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

       

        

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

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

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

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

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

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

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

 

        

   
    

    

    

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

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

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

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

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

          
           简写: 如果备选字符列表是连续的,就可用-省略中间字符

              一位小写字母:[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次
         \w+@[a-zA-Z0-9]{2,}(.[a-zA-Z0-9]{2,3}){1,2}
     需求:微信 微 信 weixin wei xin wx w x

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

猜你喜欢

转载自blog.csdn.net/Pony_18/article/details/82023732
今日推荐