正則

正課: 

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);

         兩個日期對象可相減: 得到毫秒差








發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章