JS正則表達式學習總結


JS正則:java RegExp對象,它是對字符串執行模式匹配的強大工具。運用最多的就是在輸入處驗證輸入的字符串是否合法,指定用戶輸入字符串的格式。

定義方法:

  1:直接量語法:var re=/pattern/attributes

  2:創建RegExp對象法:var re=new RegExp("pattern","attributes")

    pattern:這里可以是字符串,也可以是正則表達式對象。            //注:當使用創建RegExp對象法時,如果pattern是正則表達式,則不用寫第二個參數。

    attributes:匹配方式。它只有三個參數:i,g,m。  i:表示不區分大小寫匹配。g:查找所有匹配,而非查找到第一個就停止。m:多行匹配。

  例:var re=/a/ig   var re=new RegExp("a","ig")        //表示匹配所有的a和A。這兩種寫法是一樣的。

正則表達式的定義規則(這里主要講如何書寫pattern參數):

  1:方括號[]:表示匹配括號中的所有字符

    var re=/[a-z]/         //表示滿足小寫a-z的字符串        如:a34vas3

    var re1=/[abc][def0-9]/    //表示兩個滿足條件並且要相鄰的字符串   如:5a8zcf

  2:花括號{}:表示匹配多少個字符,通常與方括號[]一起使用

    var re =/[a-z]{3}/       //表示要有連續的三個小寫字母的字符串     如:t34bgp5jip8

    /**    var re1=/[a]{1-3}/      //表示滿足連續三個a的字符串       如:rgb89aaacd    這種寫法是錯誤的,並沒有這種1-3的寫法**/

    var re2=/[a]{1,3}/      //逗號,表示或者的意思  這里灰色之前是有誤解,{1,3}表示區間,表示大於等於1,小於等於3個都是可以的    如:rabcaaadaa   

  3:小括號():表示提取字符串,匹配到的字符串可以通過$0-9可獲取匹配的字符串,這個會在后面的例子中介紹到。

    三種括號的更多使用可以參照:https://www.cnblogs.com/signheart/p/20a396bdbdeb9aa446663395eea4e3c4.html

  4:^符號:

    4.1表示匹配一個字符串的開頭     var  re=/^[a-z]/    //表示以小寫字母開頭的字符串     如:a45jdkl

    4.2如果^符號出現在[]中的第一個字符位置,表示不包含此字符串   var re=/[^a]    //表示字符串中不能有a   如:rgb123

  5:$符號:表示匹配一個字符串的結尾 

    var re=/d$/        //表示以d結尾的字符串        如:abcd

  6:轉義字符 \ 

字符 描述 備注
. 查找單個字符,除了換行和行結束符。  
\w 查找單詞字符 等價於[A-Za-z0-9]
\W 查找非單詞字符 等價於[^A-Za-z0-9]
\d 查找數字。 等價於[0-9]
\D 查找非數字字符。 等價於[^0-9]
\s 查找空白字符。 包括空格、TAB、換頁符
\S 查找非空白字符。  
\b 匹配單詞邊界  
\B 匹配非單詞邊界。  
\0 查找 NUL 字符。  
\n 查找換行符。  
\f 查找換頁符。  
\r 查找回車符  
\t 查找制表符。  
\v 查找垂直制表符。  
\xxx 查找以八進制數 xxx 規定的字符。  
\xdd 查找以十六進制數 dd 規定的字符。  
\uxxxx 查找以十六進制數 xxxx 規定的 Unicode 字符。  

  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

7:量詞  

量詞 描述 例子
n+ +號表示匹配任何包含至少一個 n 的字符串 var re=/\d+/  如:abc1de234fg56
n* 匹配任何包含零個或多個 n 的字符串。 var re=/ab*/  如:a123abb
n? 匹配任何包含零個或一個 n 的字符串 var re=/do(es)?/  如:doAnddoes
n{X} 匹配包含 X 個 n 的序列的字符串。 var re=/[0-9]{2}/  如:a12b34c56
n{X,Y} 匹配包含 X 或 Y 個 n 的序列的字符串。 var re=/[0-9]{2,3}/  如:a12b345
n{X,} 匹配包含至少 X 個 n 的序列的字符串。 var re=/[0-9]{2,}  如:a12b345c6789
?=n 匹配任何其后緊接指定字符串 n 的字符串 var re=/a(?=12|34)  如:a12a34a67
?!n 匹配任何其后沒有緊接指定字符串 n 的字符串。 var re=/a(?!12|34)  如a66a77a12

 

 

 

 

 

 

 

 

一些常用的javaScript正則表達式:

  1:用戶名正則

    var userPattern=/^[a-zA-Z0-9-_]{4-16}$/                //用戶名只能由4-16位的大小寫字母、數字、-、_組成

  2:密碼強度正則

    var passPattern=/^.*(?=.{6,})(?=.*\d)(?=.*[A-Z])(?=.*[a-z])(?=.*[!@#$%^&*?]).*$/    //至少是有6位,必須至少要有一個數字、大小寫字母,特殊字符

  3:整數正則

    var intPattern=/^\d+$/正整數  var intPattern1=/^-\d$/負整數     var intPattern2=/^-?\d$/所有整數

  4:Email正則

    var emailPattern=/^([a-zA-Z0-9_\-\.])+\@([a-zA-Z0-9_\-\.])+\.([a-zA-Z]{2-4})$/    //注:這里的+號不是連接,而是與前面的小括號連接,表示要有一個或多個字符

  5:中文正則

    var chinesePattern=/^[\u4e00-\u9fa5]+$/

  6:手機號碼正則

    var iphonePattern=/^(1[0-9]{10})$/

  這里只列舉了一部分常用的正則,如有需要可查看更多正則:http://www.jqhtml.com/6915.html    //日期正則,身份證正則,URL正則,IPV4正則等。

正則表達式的方法:

  1:test()方法:在字符串中查找符合正則的內容,若查找得到返回true,否則false;

    格式:正則.test(字符串);

    emailPattern.test("123_456@qq_mail.com")    //返回true

  2:search()方法:搜索符合正則的第一次出現的位置,若搜索到返回第一次出現的位置,否則返回-1。

    格式:字符串.search(正則);

    var str="abcd@mail.com";    str.search(/@/);  //返回4

  3:match()方法:獲取正則匹配的結果,以數組的形式返回。

    格式:字符串.match(正則);

    "123ab45cd678".match(/\d+/g);    //返回 [123,45,678],若這里不是全局匹配則返回["123",index:0,"123ab45cd678"],就只會返回第一個

  4:exec()方法:捕獲符合正則的字符串,若捕獲到符合正則的字符串返回一個Array的實例,但它包含了兩個額外的屬性index和input。index表示符合正則字符串出現的位置;input表示字符串表達式的字符串。

    格式:正則.exec(字符串)

    var textArray=/.bc/.exec("abc12abc3abc45");      //textArray.index=0;textArray.input="abc12abc3abc45";textArray[0]=abc;

    var textArray=/.bc/g.exec("abc12bbc3cbc45");      //textArray.index=0;textArray[0]="abc";textArray[1]="bbc";textArray[2]="cbc";

  5:replace方法:用於在字符串中用一些字符替換另一些字符,或替換一個與正則表達式匹配的子串。

    格式:字符串.replace(正則|字符串,字符串|回調函數)

    5.1字符串.replace(字符串,字符串|回調函數)      //這里回調函數必須返回的是一個字符串

      "abcde12345abc".replace("abc","mmm");    //return:mmmde12345abc

    5.2字符串.replace(正則,字符串)

      "abcde12345abc".replace(/abc/g,"mmm");    //return:mmmde12345mmm

    5.3字符串.replace(正則,回調函數)

      每匹配到一個正則就會調用一次回調函數,每次回調都會傳遞以下參數:

        result:本次匹配到的結果

        $1-$9:正則中有多少個()就表示有多少個參數

        offset:記錄本次匹配的開始位置

        source:接受匹配的原始字符串

      replace搭配JS正則的一些案例:

        5.3.1:去掉字符串兩邊的空格

        "   abc   ".replace(/(^\s+)|(\s+$)/g,function(){

          return "";

        })

        5.3.2:提取URL中的參數和參數值

          var obj={};

          var url="www.emilzs.com/action?name=emilzs&age=18"

          url.replace(/([^&=]+)=([^&=]*)/gi,function(rs,$1,$2){

            obj[$1]=$2;                  //注:當第一次匹配到正則時$1為name,$2為emilzs。當第二次匹配到正則時$1為age,$2為18

          })      

        5.3.4:在指定位置插入新字符串

          str.replace(/(.{3})/,function(rs,$1){

            return $1+"xyz";                  //注:其實這種方法的意思就是將str字符串前3個字符替換成前3個字符+"xyz"

          })

        5.3.5:將電話號碼加密

          var str=number.slice(3,7);

          number.replace(new RegExp(str,g),"******");      15123456789  -->   151*****789


免責聲明!

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



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