JS高級-String-正則表達式:


1. String: 由多個字符組成的字符只讀數組

 vs 數組: 相同: 1. 下標, 2. .length, 3. 遍歷, 4. .slice

         不同: 類型不同!  API不通用

 API: 所有字符串API,都無權修改原字符串,只能返回新字符串

  大小寫轉換: 將字符串中的字母統一轉為大寫/小寫

   何時: 不區分大小寫時

   如何: str.toUpperCase() 轉大寫

        str.toLowerCase() 轉小寫

   說明: sql語句默認不區分大小寫

       如果希望密碼區分大小寫: binary upwd=$upwd

  獲取指定位置的字符:

   str[i]  str.charAt(i)

   獲取指定位置字符的unicode號

    var unicode=str.charCodeAt(i)

   將unicode號變回字:

    var char=String.fromCharCode(unicode)

  選取子字符串:

   str.slice(starti,endi+1) 含頭不含尾

     .slice(starti,-n) 到倒數第n個之前

       => .slice(starti, str.length-n)

     .slice(starti) 選取到結尾

     .slice()  選取全部

     .slice(starti,starti+n) 選擇n個

 

   str.substring(starti, endi+1) 用法同slice

     問題: 不支持負數參數

   str.substr(starti,n) 選擇n個

  查找關鍵詞: 4種:

   1. 查找一種固定的關鍵詞出現的位置:

    var i=str.indexOf("關鍵詞",fromi);

     在str中,從fromi位置開始,找下一個"關鍵詞"出現的位置

     返回值: 第一個關鍵詞的位置

       如果找不到,返回-1

    var i=str.lastIndexOf("關鍵詞");

     查找str中"關鍵詞"最后一次出現的位置

   問題: 關鍵詞可能發生變化

   解決: 用正則查找關鍵詞:

   2. 判斷是否包含關鍵詞:

    var i=str.search(/正則表達式/)

     查找str中第一個符合正則表達式規則的關鍵詞的位置

     返回值: 關鍵詞的位置

       如果沒找到,返回-1

    問題: 所有正則,默認區分大小寫的

    解決: 在第二個/后加i,  ignore

    問題: 無法獲得關鍵詞的內容

   3. 獲得關鍵詞的內容:

    1. 只獲得第一個關鍵詞的內容:

      var arr=str.match(/正則表達式/i);

       查找str中第一個符合正則表達式要求的關鍵詞的位置和內容

       返回值: [ 0: 關鍵詞,  index: 位置]

         如果沒找到返回null

    2. 獲得所有關鍵詞的內容:

      var arr=str.match(/正則表達式/ig);

      其中g: global

      返回所有關鍵詞組成的數組

    問題: 只能獲得內容,無法獲得每個關鍵詞的位置:

   4. 即查找每個關鍵詞的內容,又查找每個關鍵詞的位置:

   

  替換: 2種:

   1. 簡單替換:將所有敏感詞,替換為統一的值

     str=str.replace(/正則表達式/ig, "替換值");

   2. 高級替換:根據每個敏感詞的不同,動態選擇不同的替換值

     str=str.replace(/正則表達式/ig, function(kw){

       //kw: 可自動獲得本次找到的一個關鍵詞

       return 根據kw的不同,動態選擇不同返回值

     });

    原理: 回調函數function()會自動在每個找到的關鍵詞上調用一次。調用時,參數kw會自動接住當前關鍵詞。return返回的新值,會被替換到關鍵詞所在位置。

 

   衍生操作: 刪除: 替換為空字符串

    str=str.replace(/正則/ig,"")

 

  切割:

 

2. 正則表達式:

 什么是: 規定一個字符串中字符出現規律的規則

 何時: 2種:

  1. 用一套規則,模糊匹配多種敏感詞

  2. 用規則驗證字符串是否符合格式要求

 如何:

  1. 最簡單的規則: 就是關鍵詞本身

  2. 字符集:

   什么是: 一位字符上所有備選字符的列表

   何時: 如果一位字符上,有多種備選字時

   如何: [備選字符列表]

     強調: 一個字符集,只能匹配一位字符

     簡寫: 如果字符集中部分字符是連續的,可用-省略中間字符:  比如:

        1位數字: [0-9]

        1位小寫字母: [a-z]

        1位大寫字母: [A-Z]

        1位字母: [A-Za-z]

        1位字母或數字: [0-9A-Za-z]

        1位漢字: [\u4e00-\u9fa5]

     除了: [^47]

  3. 預定義字符集:

   \d 一位數字: [0-9]

   \w 一位字母,數字或下划線: [0-9A-Za-z_]

   \s  一位空字符: 空格, Tab, ...

   .   通配符

  問題: 無法靈活規定字符集出現的次數

  4. 量詞:

   什么是: 規定一位字符出現次數的規則

   何時: 只要靈活定義一位字符出現的次數時

   如何: 量詞緊跟在一個字符集之后,默認修飾相鄰的前一個字符集的個數

   2大類:

    1. 有明確數量邊界的

      {n,m} 至少n個,最多m個

      {n,}  至少n個,多了不限

      {n}   必須n個

    2. 沒有明確數量邊界

      * 可有可無,多了不限

      ? 可有可無,最多一個

      + 至少一個,多了不限

  5. 選擇和分組:

   1. 選擇: 或   |

     什么是: 在多組邏輯之間,任選其一匹配即可

     何時: 只要在在多組邏輯之間,任選其一匹配

   2. 分組: ( )

     什么是: 將多個邏輯包裹為一組

     問題: 默認,一個量詞只能修飾相鄰的一個字符集

     何時: 如果希望一個量詞可以同時修飾多個字符集時

 

  身份證號:

    15位數字  2位數字 一位數字或X

                 后三位整體可有可無,最多1次

        \d{15}(\d{2}[0-9X])?

  手機號:

   +86 或 0086  可有可無,最多1次

   空字符       可有可無,多了不限

   1

   3~8

   9位數字

   (\+86|0086)?\s*1[3-8]\d{9}

               ?/+

  6. 指定匹配位置:

   ^ 字符串開頭

   $ 字符串結尾

   何時: 只要匹配開頭的或結尾的內容時

   比如: ^\s+ 開頭的空字符

        \s+$ 結尾的空字符

        ^\s+|\s+$ 開頭或結尾的空字符

   \b單詞邊界: 空格,標點,開頭,結尾,。。。

   比如: 每個單詞首字符: \b[a-z]

        一個單詞no  \bno\b


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM