1. 程式人生 > >javaScript正則表達式精華

javaScript正則表達式精華

之前 ons 正則表達 scrip href amp exec pac ava

本文介紹javaScript正則表達式

目錄

創建正則表達式
正則表達式flag
在字符串中使用正則表達式
正則表達式的方法
元字符
特殊字符
貪婪模式
分組


  1. 創建正則表達式

    var str = "I love English";
    var reg = new RegExp("love", "g"); 使用構造函數創建
    var reg = /love/g; 使用字面量形式
  2. 正則表達式flag

    i 表示不區分大小寫 var reg = /Love/i;
    g 全局匹配
    u uicode模式
    y 粘連模式
        使用粘連模式,只有指定了正確lastIndex,才會匹配元素
        var str = "aa-aa-aa"
    ; var reg = /-/y; reg.lastIndex = 2; console.log(reg.exec(str))
  3. 在字符串中使用正則表達式
    • search

      返回給定要查找的字符第一個出現的索引位置
      var str = "I love English";
      var reg = /Love/i;
      console.log(str.search(reg)); -> 2
    • match

      返回字符串匹配的相關信息
      不使用正則 g 
          只匹配第一個滿足的元素
          var str = "I love English";
          var reg = /Love/i;
          console
      .log(str.match(reg)); -> ["love", index: 2, input: "I love English"] 使用小括號可以提取一部分 var reg = /(Love)/i; console.log(str.match(reg)); -> ["love", "love", index: 2, input: "I love English"] 使用正則 g 開啟g後,全局查找符合的元素 var str = "aa aa aa"; var reg = /aa/g; console.log(str.match(reg));
      -> ["aa", "aa", "aa"] 使用小括號無用 沒有匹配的元素則返回null
    • split

      分割字符串
      var str = "aaCDaaCDaa";
      console.log(str.split(/CD/));
    • replace

      替換字符串一部分
      var str = "aa-aa-aa";
      console.log(str.replace(/-/, "A")); 替換第一個 "aaAaa-aa"
      console.log(str.replace(/-/g, "A")); 替換所有的 "aaAaaAaa"
      第二個參數中可以使用反向引用字符
          $$ 表示一個$字符 console.log(str.replace(/-/g, "$$")); -> aa$aa$aa
          $& 表示匹配到的字符 console.log(str.replace(/-/g, "$&$&")); -> aa--aa--aa
          $` 表示匹配到的字符之前的所有字符 console.log(str.replace(/-/g, "C$`")); -> aaCaaaaCaa-aaaa
          $‘ 表示匹配到的字符之後的所有字符 console.log(str.replace(/-/g, "C$‘")); -> aaCaa-aaaaCaaaa
          $n 表示匹配的字符中第幾個括號中匹配的字符 console.log(str.replace(/(-)/g, "C$1")); -> aaC-aaC-aa
      第二個參數還可以使用函數
          只要匹配到了都會調用此函數
          console.log(str.replace(/(-)/g, function(...obj){
              console.log(obj); -> ["-", "-", 2, "aa-aa-aa"] 
              obj的參數
                  第一個參數,匹配的字符
                  第二個參數,小括號的字符
                  第三個參數,匹配的字符的索引位
                  第四個參數,原始字符
              return 1
          })); -> aa1aa1aa
  4. 正則表達式的方法
    • test

      判斷是否有符合正則匹配的元素
      console.log(/a/.test(str)); -> true
      等價於 console.log(str.search(/a/) != -1);
    • exec

      exec用來提取匹配的元素
      不使用g,作用和不用g的match方法是一樣的
          var str = "aa-aa-aa";
          console.log(/-/.exec(str)); -> ["-", index: 2, input: "aa-aa-aa"]
      使用g,重復調用exec逐步向後查找
          var str = "aa-aa-aa";
          var reg = /-/g;
          console.log(reg.exec(str)); -> ["-", index: 2, input: "aa-aa-aa"]
          console.log(reg.exec(str)); -> ["-", index: 5, input: "aa-aa-aa"]
          全部找出匹配的元素
          let result = null;
          while(result = reg.exec(str)){
              console.log(result);
          }
  5. 元字符

    \d 數字0~9
    \s 空字符spaces,tabs,newlines
    \w 字母 a-ZA-Z_
    \b 簡單點理解,是用來表示\w單詞的邊界 "1 11 111 22".match(/\b\d\d\b/g) -> ["11", "22"]
    \D 非數字字符
    \S 非空格字符
    \W 非字母字符
    \B 非邊界
    . 匹配任意字符,除了newlines
  6. 特殊字符

    需要轉義的字符
        . ( ) \ / [ ]
    []用法
        [abc] 表示多個字符中的一個
        [a-z]
        [^abc] 表示除了abc以外的字符
    量詞
        \d{5} 表示5個數字
        \d{3,5} 表示 >=3 <=5 個字符
        \d{3,} 表示 >=3 個字符
        + 一個或一個以上
        ? 0個或者一個
        * 0個或者多個
    
        a|b|c
    精確匹配
        /^abc$/
  7. 貪婪模式

    在使用量詞的時候,默認是開啟貪婪模式的
        let str = "today is a ‘good day‘, isn‘t it?"
        console.log(str.match(/‘.+‘/)); -> ["‘good day‘, isn‘", index: 11, input: "today is a ‘good day‘, isn‘t it?"]
    取消貪婪模式
        console.log(str.match(/‘.+?‘/)); -> ["‘good day‘", index: 11, input: "today is a ‘good day‘, isn‘t it?"]
        console.log(str.match(/‘[^‘]+‘/)) -> ["‘good day‘", index: 11, input: "today is a ‘good day‘, isn‘t it?"]
  8. 分組

    使用圓括號可以提取組
        let str = "aa-bb-aa";
        console.log(str.match(/(a)+/)); -> ["aa", "a", index: 0, input: "aa-bb-aa"]
    取消捕獲組
        console.log(str.match(/(?:a)+/)); -> ["aa", index: 0, input: "aa-bb-aa"]
    分的組可以直接在正則表達式中引用
        console.log(str.match(/(a)\1/)); -> ["aa", "a", index: 0, input: "aa-bb-aa"]

javaScript正則表達式精華