1. 程式人生 > 實用技巧 >JavaScript基礎(12_正則表示式)

JavaScript基礎(12_正則表示式)

正則表示式

正則表示式

  • 用於定義一些字串的規則

    • 計算機可以根據正則表示式,來檢查一個字串是否符合規則

    • 語法:

      • var 變數 = new RegExp("正則表示式", "匹配模式"); (更為靈活)

      • 在建構函式中可以傳遞一個匹配模式作為第二引數

        • i = 忽略大小寫

        • g = 全域性匹配模式

        • var reg = new RegExp("需要匹配的文字", "i")
      • 使用字面量建立正則表示式: var 變數 = /正則表示式/匹配模式 (更為簡單)

        • var reg = /a/i
    • 正則中的test()方法

      • 如果字串 string 中含有與 RegExpObject 匹配的文字,則返回 true,否則返回 false

      • 嚴格區分大小寫

    • 或者

      • 使用 | 表示或者的意思

      • 使用[] ,裡面的內容也是或的關係,如: [abc] = a或b或c

      • 使用中橫線

      • 表示任意小寫字母 [a-z]

      • 表示任意大寫字母 [A-Z]

      • 表示任意數字 [0-9]

      • 表示abc 或者adc 或者 aec /a[bde]c/

    • 除了

      • 除了ab以外的

      • // 可以寫為[^ab]

基本用法

  • split()

    • 可以將字串拆分為一個數字

    • 可以傳遞一個正則表示式作為引數,這樣可以根據正則來拆分字串

    • 這個方法即使不指定全域性匹配,也會全部拆分

    • var str = "1a2b3c4d5e6fGa9"
      var
      reg = new RegExp("[a-z]","i") res = str.split(reg) console.log(res) // ["1", "2", "3", "4", "5", "6", "", "", "9"]
  • match()

    • 可以根據正則表示式,從一個字串中,將符合條件的內容提取查出來

    • 預設情況下,match只會找到第一個符合要求的內容,找到後就停止檢索

    • 可以設定正則為全域性匹配模式,這樣就可以匹配所有的內容了

    • 將匹配到的內容封裝到陣列中能夠返回,即使僅僅匹配到一個

    • var str = "1a2b3c4d5e6fGa9"
      var reg1 = new
      RegExp("[a-z]","i") var reg2 = new RegExp("[a-z]","g") res1 = str.match(reg1) res2 = str.match(reg2) console.log(res1) //["a", index: 1, input: "1a2b3c4d5e6fGa9", groups: undefined] console.log(res2) //["a", "b", "c", "d", "e", "f", "a"]
  • search()

    • 如果搜尋到指定內容,則會返回第一次出現的索引

    • 如果沒有搜到,則返回-1

    • 可以接收一個正則作為引數,然後根據正則進行檢索

    • 只會查詢第一個,不能全域性匹配

    • var str = "1a2b3c4d5e6fGa9"
      var reg1 = new RegExp("b","i")
      var reg2 = new RegExp("M","g")
      res1 = str.search(reg1)
      res2 = str.search(reg2)
      console.log(res1)   //3
      console.log(res2)   //-1
  • replace()

    • 可以搜尋字串中是否含有指定的內容替換為新的內容

    • 引數

      • 被替換的內容,可以接收一個正則表示式作為引數

      • 新的內容

      • 預設只會替換第一個

      • var str = "1a2b3c4d5e6fGa9"
        var reg1 = new RegExp("b","ig")
        var reg2 = new RegExp("[a-z]","ig")
        res1 = str.replace(reg1,"+")
        res2 = str.replace(reg2,"?")
        console.log(res1) //1a2+3c4d5e6fGa9
        console.log(res2) //1?2?3?4?5?6???9

量詞

  • 建立一個正則表示式,檢查一個字串中是否含有aaa

    • var reg1 = /aaa/
    • var reg2 = new RegExp("a{3}")
  • 通過量詞可以設定一個內容連續出現的次數

    • {n} 正好連續出現n次

    • (ab){3}, 表示ab正好連續出現3次

    • {ab{1,3}c}, 表示b可以出現1次到3次

    • {ab{1,}c}, 表示b可以出現1次以上

    • +表示至少1個

    • "*"表示0個或者多個,相當於{0,}

    • ? 表示0個或者1個,相當於{0,1}

    • ^ 表示開頭,如/^a/ 表示以a開頭

    • $ 表示結尾,如/a$/ 表示以a結尾
  • 案例

    • var phoneStr = "13567890123";
      var reg = /^1[3-9][0-9]{9}$/;
      console.log(reg.test(phoneStr))

補充

  • "."

    • 任意字元

  • \

    • 轉譯字元

    • 注意 使用建構函式時,由於他的引數是字串,而\是字串中轉譯字元

    • 如果要使用\則需要使用\\代替
  • \w

    • 表示任意字母、數字、下劃線

  • \W

    • 表示出了任意字母、數字、下劃線

  • \d

    • 表示任意數字

  • \D

    • 表示除了數字

  • \s

    • 表示空格

  • \S

    • 表示除了空格

  • \b

    • 單詞邊界

  • \B

    • 除了單詞邊界

  • 案例

    • // 檢查字串中是否含有.
      var reg = /\./;
      var str = prompt("輸入使用者名稱");
      // 去除開頭和結尾的所有空格
      console.log(str.replace(/^\s*|\s*$/g, ""));