瞭解正則表達式

正則表達式(Regular Expression)

  • 正則表達式: 也叫規則表達式,按照必定的規則組成的一個表達式,簡寫(regex、regexp或RE)
    • 做用: 主要是匹配字符串.(在大多數編程語言中均可以使用)
    • 組成: 是由元字符或者是限定符組成的一個式子

元字符

  • . 表示的是: 除了\n之外的任意的一個字符 "fsdas"
  • [] 表示的是: 範圍
    • [0-9] 表示的是0到9之間的任意的一個數字
    • [100-200]是錯誤的 得用[1][0-9][0-9]
    • [a-z] 表示的是:全部小寫的字母中的任意一個
    • [A-Z] 表示的是:全部大小的字母中的任意一個
    • [a-zA-Z] 表示的是: 全部的字母中的任意一個
    • [0-9a-zA-Z] 表示的是: 全部的數字或者是字母中的一個
    • [] 另外一個含義: 把正則表達式中的元字符的意義幹掉 [.]
  • | 表示的是: 或者
    • [0-9]|[a-z] 表示的要麼是一個數字,要麼是一個小寫的字母
  • () 表示的是: 分組 提高優先級
    • [0-9]|([a-z])|[A-Z] 先算小括號裏面的
    • ([0-9])([1-5])([a-z]) 三組,從最左邊開始計算

--------都是元字符,下面這些也能夠叫限定符(限定前面的表達式出現的次數)javascript

    • 表示的是: 前面的表達式出現了0次到屢次
    • [a-z][0-9]* 小寫中的任意一個 後面是要麼沒有數字的,要麼是多個數字的. 例如"fadwa2323"
    • 表示的是: 前面的表達式出現了一次到屢次
    • [a-z][9]+ 小寫字母一個後面最少一個9,或者多個9 例如"fasd99adasd"
  • ? 表示的是: 前的表達式出現了0次到1次,最少是0次,最多1次,另外一個含義: 阻止貪婪模式
    • [4][a-z]? "1234ij"
  • {} 表示的是: 更加明確前面的表達式出現的次數
    • {0,} 表示的是前面的表達式出現了0次到屢次,和*同樣
    • {1,} 表示的是前面的表達式出現了1次到屢次,和+同樣
    • {0,1} 表示的是前面的表達式出現了0次到1次,和?同樣
    • {5,10} 表示的是前面的表達式出現了5次到10次
    • {4} 表示的是前面的表達式出現了4次
    • {,10} 錯誤的寫法=======================
  • ^ 表示的是以xxx開始,或者是取非(取反)
    • ^[0-9] 以數字開頭
    • ^[a-z] 以小寫字母開始
    • [^0-9] 取反,非數字
    • [^a-z] 非小寫字母
    • [^0-9a-zA-Z_] 特殊符號(_不是特殊符號)
  • $ 表示的是以xxx結束
    • [0-9][a-z]$ 必需以小寫字母結束(一個字母一個數字結束)
    • ^[0-9][a-z]$ "4f"(至關於嚴格模式下必需是一個數字一個字母)
    • ^[0-9][a-z] "3f231d" (一個字母一個數字開頭) --------------------- 限定分割線
  • \d 數字中的任意一個
  • \D 非數字中的一個
  • \s 空白符中的一個 " "
  • \S 非空白符
  • \w 非特殊符號 等價於[A-Za-z0-9_]
  • \W 特殊符號 等價於[^A-Za-z0-9_]
  • \b 單詞的邊界.一個詞的邊界就是一個詞不被另一個「字」字符跟隨的位置或者沒有其餘「字」字符在其前面的位置。
    • /\bm/匹配「moon」中的'm'
    • /oo\b/並不匹配"moon"中的'oo',由於'oo'被一個「字」字符'n'緊跟着。
  • \t tab鍵 水平製表符
  • \ 轉義字符 在非特殊字符以前的反斜槓表示下一個字符是特殊的
    • 反斜槓也能夠將其後的特殊字符,轉義爲字面量.

-----------------------分割線java

正則表達式練習
  • 找規律 不要追求完美
  • 身份證的正則表達式
    • 15位或者18位 : ([1-9][0-9]{14})|([1-9][0-9]{16}[0-9xX ]) 或者 ([1-9][0-9]{14})([0-9]{2}[0-9xX])?
  • 座機號碼的正則表達式
    • 010-19876754或者0431-87123490: [0-9]{3,4}[-][0-9]{8} 或者 \d{3,4}[-]\d{8}
  • qq號碼的正則表達式
    • 5位到11位: \d{5,11} 或者 [1-9][0-9]{4,11}
  • 手機的正則表達式
    • 130-139 143 147 150-159 170 171 173 176 177 180-189 : ([1][358][0-9]{8})|([1][4][37][0-9]{8})|([1][7][01367][0-9 ]{8})
  • 郵箱的正則表達式,必需要記住的 [0-9a-zA-Z_.-]+[@][0-9a-zA-Z_.-]+([.][a-zA-Z]+){1,2}

JS建立正則表達式對象

  • 建立方式: (正則表達式的做用:匹配字符串的) 1.經過構造函數建立對象正則表達式

    var reg = new RegExp(/\d{5}/); RegExp();//對象建立完畢--沒有正則表達式的對象
        //調用方法驗證字符串是否匹配
        var flag = reg.test("個人電話是10086");
        console.log(flag);//true
        
    複製代碼

    2.經過字面量方式建立對象編程

    var reg = /\d{1,5}/;
        var flag = reg.test("個人幸運:888");
        console.log(flag);//true
    複製代碼
  • 正則表達式中:bash

    • g 表示的是全局模式匹配
    • i 表示的是忽略大小寫
  • 正則提取編程語言

    • stringObject.match() 方法可在字符串內檢索指定的值,或找到一個或多個正則表達式的匹配。
    • 正則表達式中的()做爲分組來使用,獲取分組匹配到的結果用Regex.$1 $2 $3....來獲取
    // 1. 提取工資
        var str = "張三:1000,李四:5000,王五:8000。";
        var array = str.match(/\d+/g);
        console.log(array);
        
        // 2. 提取email地址
        var str = "123123@xx.com,fangfang@valuedopinions.cn 286669312@qq.com 二、emailenglish@emailenglish.englishtown.com 286669312@qq.com...";
        var array = str.match(/\w+@\w+\.\w+(\.\w+)?/g);
        console.log(array);
        
        // 3. 分組提取 
        // 3. 提取日期中的年部分 2015-5-10
        var dateStr = '2016-1-5';
        // 正則表達式中的()做爲分組來使用,獲取分組匹配到的結果用Regex.$1 $2 $3....來獲取
        var reg = /(\d{4})-\d{1,2}-\d{1,2}/;
        if (reg.test(dateStr)) {
          console.log(RegExp.$1);
        }
        
        // 4. 提取郵件中的每一部分
        //-----/([0-9a-zA-Z_.-]+)[@]([0-9a-zA-Z_-]+)(([.][a-zA-Z]+){1,2})/-------
        var reg = /(\w+)@(\w+)\.(\w+)(\.\w+)?/;
        var str = "123123@xx.com";
        if (reg.test(str)) {
          console.log(RegExp.$1);
          console.log(RegExp.$2);
          console.log(RegExp.$3);
        }
    複製代碼
  • 正則替換函數

    // 1. 替換全部空白
        var str = " 123AD asadf asadfasf adf ";
        str = str.replace(/\s/g,"xx");
        console.log(str);
        
        // 2. 替換全部,|,
        var str = "abc,efg,123,abc,123,a";
        str = str.replace(/,|,/g, ".");
        console.log(str);
        
        //3. 替換空格
        var str = " 哦買噶的 ,太幸福了 ";
        str = str.replace(/\s+/g, "");
        console.log("===" + str + "===");
        
        //全部的h都替換成S
        var str="HhpphH";//SSppSS
        str=str.replace(/[h]/gi,"S");
        console.log(str);
    
    複製代碼
  • 正則表達式的方法ui

    • 正則表達式對象.exec(字符串); 須要遍歷一個個提取出來(與字符串對象.match方法()同樣)
    //    var str = "中國移動:10086,中國聯通:10010,中國電信:10000";
        //    var reg=/\d{5}/g;
        //    //經過正則表達式匹配這個字符串
        //    var array=reg.exec(str);
        //    console.log(array);
        //    console.log(reg.exec(str));
        //    console.log(reg.exec(str));
        //    console.log(reg.exec(str));//null
        
        var str = "中國移動:10086,中國聯通:10010,中國電信:10000";
        var reg=/\d{5}/g;
        //經過正則表達式匹配這個字符串
        var array=reg.exec(str);
        while (array!=null){
          //輸出匹配的內容
          console.log(array[0]);
          array=reg.exec(str);
        }
    
    複製代碼
相關文章
相關標籤/搜索