js正則表達式的基本用法詳解


正則表達式也是js里面的一個對象

創建一個正則表達式

可以這樣創建一個:var reg2=new RegExp("abc");  //RegExp是正則對象的構造函數

也可以通過標記的形式創建:var reg1=/abc/;   //其中的' // '是標記,abc表示要匹配的字符

正則表達式匹配

    var reg=/b/;        //匹配字符串中的b字符
    reg.test("abc");     
    //正則表達式的test用來檢測字符串是否滿足正則表達式的要求;
    //由於"abc"中存在b,所以是符合要求的,所以這段代碼的返回值為:true

    const isTrue = reg.test("coke");   //由於"coke"中不存在b字符,所以不符合條件   -->isTrue:false


    var reg2=/abc/;     
    reg2.test("adbcd"); //字符串中必然存在"abc"才符合要求,所以這段代碼的返回值為false

    reg2.test("1abc");      //true
    reg2.test("abc123");    //true
    reg2.test("abcabc");    //true

正則表達式特殊字符

字符類別

. 表示除了換行符(\r \n)以外的任意字符

    var reg=/./;
    reg.test("a");  //true
    reg.test(".");  //true
    reg.test("\r"); //false
    reg.test("1\r");    //存在一個1,不是換行符,所以結果為:true
    reg.test("\r\n");   //false

    //注意點:如果以后要匹配.字符,不要直接寫.
    //為了匹配qq郵箱,寫了 /qq.com/ 這是一個錯誤的寫法:
    //=>/qq.com/不僅匹配:"qq.com"也匹配"qq1com" "qq@com"

    //解決方案:/qq\.com/  或者 /qq[.]com/

\d 表示數字

    var reg=/\d/;
    reg.test("1abc"); //由於存在一個數字,所以結果為true
    reg.test("abcde");  //由於不存在任何數字,所以結果為false

    //擴展:
    var _reg=/\d\d/;
    _reg.test("1b");    //不存在2個連續數字,所以結果為:false
    _reg.test("a12c");  //存在2個連續數字,結果為:true

\D 是\d的取反結果,表示不是數字

    var reg=/\D/;
    reg.test("123");   //由於全是數字,所以結果為:false
    reg.test("123a");  //存在一個字母,所以結果為:true

    var reg2=/123\D5/;
    reg2.test("12345"); //false
    reg2.test("123b5"); //true

\w 匹配字母、數字、下划線 ,三者滿足其一即可

    var reg=/\w/;   
    reg.test("123");    //存在數字,結果為:true
    reg.test("a");  //true
    reg.test("1");  //true
    reg.test("_");  //true
    reg.test("-");  //false
    reg.test(".");  //false

    reg.test("1.");   //true
    reg.test("_\r");  //true
    reg.test("\r");   //false

\W 是\w的取反

\s 表示一個空白字符(例如:\r \n \t 空格 。。。)

    var reg=/\s/;
    reg.test("abc def");   //存在一個空白,結果為:true
    reg.test("abc\r123");   //存在一個\r,結果為:true
    reg.test("abc");    //false

\S 是\s的取反

    var reg=/\S/;
    reg.test(" \r \n ");   //全是空白字符,結果為false
    reg.test("123 abc");    //存在一個空白,結果為true


    var reg3=/\s\S/;
    reg3.test(" a");    //true
    reg3.test("a ");    //存在空白字符和非空白字符,但不符合正則的順序,false
    reg3.test("a b");   //true

\ 轉義字符

    var reg=/\./;   //匹配.字符

    var reg=/\//;   //匹配一個正斜杠:/

字符集合

[ ]

    var reg=/[1a2b3]/; //匹配這5個字符中的其中一個,只要滿足其中,就是符合要求的
    reg.test("a");      //結果為:true
    reg.test("3");      //結果為:true
    reg.test("cd56789"); //一個符合要求的字符都不存在,結果為:false
    reg.test("a55555");    //結果為:true

    var reg2=/[123][abc]/;
    reg2.test("2a");    //true
    reg2.test("3c");    //true
    reg2.test("defgh1c");    //存在符合條件的1c,結果為:true
    reg2.test("39");    //不滿足

    var reg2=/[0-9]/;   //匹配數字0-9之間,任何一個數字 等價於:/\d/
    var reg3=/[a-z]/;   //匹配小寫字母
    var reg4=/[A-Z]/;   //匹配大寫字母
    var reg5=/[a-zA-Z]/;//匹配所有字母
    var reg6=/[A-Za-z]/;//..........

    var reg10=/[0-9abc]/;
    reg10.test("3");//true
    reg10.test("five");//false
    reg10.test("banana");//true

[^]

    var reg=/[^123]/;   //不是1 並且 不是2 並且 不是3 
    reg.test("a");      //true
    reg.test("3");      //false
    reg.test("123");    //沒有1,2,3以外的字符,結果為:false

邊界

^ 表示字符串最左邊

$ 表示字符串最右邊

    var reg=/^abc/;     //表示以abc開頭
    reg.test("123abc123");  //並不是以abc開頭,結果為:false
    reg.test("abc123");     //以abc開頭,結果為:true    

    var reg=/abc$/;     //表示以abc結尾
    reg.test("123abc"); //結果為:true
    reg.test("abc123"); //結果為:false

    var reg=/^abc$/;    //表示字符串abc
    reg.test("abc");    //結果為:true
    reg.test("123abc"); //結果為:false

量詞

* 出現0次或多次

    var reg=/\d*/;
    reg.test("123");    //true
    reg.test("234");    //true
    reg.test("");    //true

    var reg3=/1\d*/;
    reg3.test("123");   //true
    reg3.test("a123")   //true
    reg3.test("a2b");   //false

+ 出現1次或多次

? 出現0次或一次

{3} 出現3次

{3,} 至少出現3次

{3,5} 出現3-5次

    var reg=/abc{3}/;           //表示匹配abccc
    reg.test("123abccc123");    //結果為:true

| 或者

    var reg=/abc|123/;  //表示匹配abc或者123

() 分組

    var reg=/(\d{3-4})-(\d{7,8})/;
    var arr="021-33335555".match(/(\d{3,4})-(\d{7,8})/); //這個方法是查找一個或多個正則表達式的匹配。
    arr[0]  //全部
    arr[1]  //021
    arr[2]  //333355555

    var reg=/(\d{3-4})-(\d{7,8})/;
    var str = "021-33335555";
    str.replace(/(\d{3,4})-(\d{7,8})/,'$1');    //這個方法是在字符串中查找匹配的子串, 並替換與正則表達式匹配的子串。
    //021 返回分組后'$1'對應的字符串替換正則匹配到的所有字符

    str.replace(/(\d{3,4})-(\d{7,8})/,'$2');    //33335555 返回分組后'$2'對應的字符串替換正則匹配到的所有字符

案例:匹配手機號碼(國內)

    var reg =/^1[3-9][0-9]\d{8}$/;

 


免責聲明!

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



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