首页 > 代码库 > JS 9

JS 9

1. 正则:

 指定匹配位置

2. ***String API:

    替换: 衍生: 删除和格式化

    切割

3. ***RegExp对象

 

1. 正则:

    指定匹配位置: 三个位置:

      字符串的开头  ^

      字符串的结尾  $

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

                  结尾的空字符: \s+$

                  开头或结尾的空字符^\s+|\s+$

         固定套路: 只要希望字符串和正则从头到尾完全匹配

                         比如同时前加^后加$

                只要用正则表达式执行验证时,必须前加^后加$

      单词边界        \b  包含: ^  $   空格    标点

         比如: 单词首字母: \b[a-z]

                  单词尾字母: [a-z]\b

                  单独的一个单词no: \bno\b

 

2. ***StringAPI

  替换: 简单替换: str=str.replace(/正则/ig, "替换值");

           问题: 不能根据不同的关键词,选择不同的值替换

     解决: 高级替换:

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

          //kw会自动获得本次找到的关键词内容

          return //根据不同kw,返回不同的替换值

      })

     何时: 只要根据不同的关键词,替换不同内容时

  衍生:

    删除: 将关键词替换为""

    格式化: 将原字符串重新拼接为新的格式

      比如: "19831226" => "1983年12月26日"

      2步: 1. 正则将原字符串分组

                 /(\d{4})(\d{2})(\d{2})/

               //    1         2         3

             2. 使用简单替换: str.replace(/正则/,"...$n...")

                  $n可自动获得第n个分组的子内容

                    n从1开始

  切割: 将原字符串,按指定字符,分隔为多个子字符串

      如何: var substrs=str.split(/正则/)

         返回切割后的多个子字符串组成的数组

                结果中,不再包含分隔符

      固定套路: 将字符串打散成字符数组: var chars=str.split("")

 

3. ***RegExp:

    什么是: 封装一条正则表达式, 提供了使用正则表达式进行查找和验证的API

    何时: 1. 查询关键词的第四种情况: 即查内容,又查位置

             2. 利用正则表达式执行验证

    如何:

       创建: 2种:

          1. 如果正则表达式是固定不变的: var reg=/正则/ig;

               强调: /正则/中正则中的/都要转义为\/

          2. 如果正则表达式是动态生成的:

               var reg=new RegExp("正则"[,"ig"]);

               强调: "正则"中的" \ 都要转义为\"  \\

                 比如: "\d{6}" => "\\d{6}"

                

 

 

 

1. ***RegExp:

2. Math

3. ***Date

 

1. ***RegExp

   API:

     验证: 检查字符串是否完全符合正则表达式的要求!

      如何: var bool=reg.test(待检测字符串)

         强调: 只要验证,reg中必须前加^后加$

    

     查找关键词: 第四种情况: 即找内容,又找位置

      如何: var arr=reg.exec(待查找的完整字符串)

              在"待查找的完整字符串"中,依次查找每个符合reg要求得关键词。

          返回值: 本次找到的一个关键词及其位置

             arr[0]: 关键词内容

                如果正则中有分组

                arr[n]: 自动保存第n个分组匹配的子内容

             arr["index"]: 当前关键词位置 -> 可简写为arr.index

             如果没找到,返回null

          每次查找后,都将reg.lastIndex属性(下次开始位置)修改为当前index+关键词长度,相当跳过当前关键词继续向后找

  

      固定套路: 找所有关键词:

         while((arr=reg.exec(str))!=null){

              arr[0] 关键词内容

                 arr[n]  自动获得第n个分组的子内容

              arr.index 当前关键词位置

         }

         如果只需要分组的子字符串,不需要完整关键词:

            可省略arr,用RegExp.$n

         while(reg.exec(str)!=null){

               RegExp.$n   自动获得第n个分组的子内容

         }

 

      练习:

       贪婪模式: 正则表达式默认匹配最长的符合条件的子字符串

              默认使用贪婪模式

              .*    .+

       懒惰模式: 仅匹配最短的符合条件的子字符串

          贪婪->懒惰:  .*?   .+?

 

2. Math:

   什么是: 专门封装数学计算所用常量,并提供数学计算所用API

   何时: 只要数学计算时

   特点: 不能new!

   API:

     1. 取整:

         Math.ceil(num) 上取整: 只要超过,就取下一个整数

         Math.floor(num) 下取整: 省略小数部分

         Math.round(num) 四舍五入取整:

         vs toFixed(d):

           1. 小数位数: Math.round()只能取整,不能规定小数位数

                                    toFixed(d)可取整,也可规定小数位数

           2. 返回值: Math.round()返回number

                           toFixed(d)返回string

         自定义round函数:

    2. 乘方和开平方:

      乘方: Math.pow(底数, 幂)

      开平方: Math.sqrt(n)

    3. 最大值和最小值:

      Math.max(值1,值2,...);

      Math.min(值1,值2,...);

        问题: 不支持数组

        解决: Math.max.apply(null,arr)

    4. 随机数:

        Math.random()  0<=r<1 随机小数

        从min~max之间取随机整数:

        Math.floor(Math.random()*(max-min+1)+min)

        从0~n之间去随机:

        Math.floor(Math.random()*(n+1));

 

3. ***Date

   什么是: 封装一个时间,提供操作时间的API

   何时: 只要存储时间,都要用Date对象

   如何:

      创建: 4种:

      1. 创建日期对象,并自动获得当前客户端系统时间

         var now=new Date();

      2. 创建日期对象,并封装自定义时间:   

         var date=new Date("yyyy/MM/dd hh:mm:ss");

         var date=new Date(yyyy,MM-1,dd,hh,mm,ss)

      3. 复制一个日期对象:

         问题: 日期对象的计算都是直接修改原日期对象

                      计算后无法保留计算前的旧时间

         解决: 今后如果需要同时保留开始和结束时间时

                     都要先将开始时间复制一个副本,再用副本计算

         var date1=new Date(...);

         var date2=new Date(date1);

      4. 用毫秒数创建日期对象:

         Date对象的原理:

            Date对象中保存了一个巨大的毫秒数

               起始时间为: 1970年1月1日0点至今的毫秒数

         var date=new Date(ms);

         两个日期对象可相减: 得到毫秒差

 

 

 

 

 

 

       

 

JS 9