萬盛學電腦網

 萬盛學電腦網 >> 腳本專題 >> javascript >> JavaScript中的正則表達式介紹

JavaScript中的正則表達式介紹

 這篇文章主要介紹了JavaScript中的正則表達式,簡明總結了正則中的語法含義和RegExp對象,需要的朋友可以參考下

一、定義正則表達式的方法   定義正則表達式的方法有兩種:構造函數定義和正則表達式直接量定義。例如:    代碼如下:var reg1 = new RegExp('d{5, 11}'); // 通過構造函數定義 var reg2 = /d{5, 12}/; // 通過直接量定義   正則表達式直接量字符        o:NUL字符(u0000)        t:制表符(u0009)        n:換行符(u000A)        v:垂直制表符(u000B)        f:換頁符(u000C)        r:回車符(u000D)        xnn:由十六進制數nn指定的拉丁字符,例如,x0A等價於n        uxxxx:由十六進制數xxxx指定的Unicode字符,例如u0009等價於t        cX:控制字符^X,例如,cJ等價於換行符n 正則表達式錨字符        ^:匹配字符串的開頭,在多行檢索中,匹配一行的開頭        $:匹配字符串的結尾,在多行檢索中,匹配一行的結尾        b:匹配一個單詞的邊界,簡言之,就是位於字符w和W之間的位置,或位於字符w和字符串的開頭或者結尾之間的位置([b]匹配的是退格符)        B:匹配非單詞邊界的位置        (?=p):零寬正向先行斷言,要求接下來的字符都與p匹配,但不能包括匹配p的那些字符        (?!p):零寬負向先行斷言,要求接下來的字符串不與p匹配 正則表達式的字符類        [...]:方括號內的任意字符        [^...]:不在方括號內的任意字符        .:除換行符和其他Unicode行終止符之外的任意字符        w:任何ASCII字符組成的單詞,等價於[a-zA-Z0-9]        W:任何不是ASCII字符組成的單詞,等價於[^a-zA-Z0-9]        s:任何Unicode空白符        S:任何非Unicode空白符的字符,注意w和S不同        d:任何ASCII數字,等價於[0-9]        D:除了ASCII數字之外的任何字符,等價於[^0-9]        [b]:退格直接量(特例) 正則表達式的重復字符語法        {n, m}:匹配前一項至少n次,但不能超過m次        {n, }:匹配前一項n次或者更多次        {n}:匹配前一項n次        ?:匹配前一項0次或者1次,也就是說前一項是可選的,等價於{0, 1}        +:匹配前一項1次或多次,等價於{1, }        *:匹配前一項0次或多次,等價於{0, } 正則表達式的選擇、分組和引用字符        |:選擇,匹配的是該符號左邊的子表達式或右邊的子表達式        (…):組合,將幾個項組合為一個單元,這個單元可通過“*”、“+”、“?”和“|”等符號加以修飾,而且可以記住和這個組相匹配的字符串以供此後的任何使用        (?: …):只組合,把項組合到一個單元,但是不記憶與改組相匹配的字符        n:和第n個分組第一次匹配的字符相匹配,組是圓括號中的子表達式(也有可能是嵌套的),組索引是從左到右的左括號數,“(?:”形式的分組不編碼 正則表達式修飾符        i:執行不區分大小寫的匹配        g:執行一個全局匹配,簡言之,即找到所有的匹配,而不是在找到第一個之後就停止        m:多行匹配模式,^匹配一行的開頭和字符串的開頭,$匹配行的結尾和字符串的結尾 用於模式匹配的String方法        search():它的參數是一個正則表達式,返回第一個與之匹配的子串的起始位置,如果沒有匹配的子串就返回-1。如果search()的參數不是正則表達式,則首先會通過RegExp構造函數將它轉換為正則表達式,search()不支持全局檢索,因為它忽略修飾符g。如:   代碼如下: var s = "JavaScript".search(/script/i); // s = 4            replace():它用來執行檢索與替換。接收兩個參數,第一個是正則表達式,第二個是要進行替換的字符串。正則表達式如果設置的修飾符g,則進行全局替換,否則只替換匹配的第一個子串。如果第一個參數不是正則表達式,則直接搜索該字符串,而不是將其轉換為正則表達式。如:    代碼如下:var s = "JavaScript".replace(/java/gi, "Script"); // s =  Script Script            match():它的參數是一個正則表達式,如果不是則通過RegExp轉換,返回的是一個由匹配結果組成的數組。如果設置了修飾符g則進行全局匹配。如:    代碼如下:var d = '55 ff 33 hh 77 tt'.match(/d+/g); // d = ["55", "33", "77"]            split():這個方法用以將調用它的字符串拆分為一個子串組成的數組,使用的分隔符是split()的參數,它的參數也可以使一個正則表達式。如:   代碼如下:var d = '123,31,453,645'.split(','); // d = ["123", "31", "453", "645"] var d = '21 , 123,  44,  64,  67,  3'.split(/s*,s*/); // d = ["21", "123", "44", "64", "67", "3"]     二、RegExp對象        每個RegExp對象都有5個屬性。屬性source是一個只讀字符串,包含正則表達式的文本。屬性global是一個只讀布爾值,用以說明這個正則表達式是否帶有修飾符g。屬性ignoreCase是一個只讀布爾值,用以說明這個正則表達式是否帶有修飾符i。屬性multiline是一個只讀布爾值,用以說明這個正則表達式是否帶有修飾符m。屬性lastIndex是一個可讀可寫的整數,如果匹配模式帶有g修飾符,這個屬性存儲整個字符串中下一次檢索的開始位置。        RegExp對象有兩個方法。exec()的參數是一個字符串,它的功能與match()相似,exec()方法對一個指定的字符串執行一個正則表達式,也就是在一個字符串中執行匹配檢索。如果沒有找到任何匹配就返回null,找到了匹配就返回一個數組,這個數組的第一個元素包含的是與正則表達式相匹配的字符串,余下的元素是與圓括號內的子表達式相匹配的子串,不論正則表達式是否有修飾符g,都會返回一樣的數組。當調用exec()的正則表達式對象具有修飾符g時,它將把當前正則表達式對象的lastIndex屬性設置為緊挨著匹配子串的字符位置。當同一個正則表達式第二次調用exec()時,它將從lastIndex屬性所指示的字符串處開始檢索,如果exec()沒有發現任何匹配結果,它會將lastIndex重置為0。如:   代碼如下:var p = /Java/g; var text = "JavaScript is more fun than Java!" var r; while((r = p.exec(text)) != null) {        console.log(r, 'lastIndex: ' + p.lastIndex); }            另外一個方法是test(),它的參數是一個字符串,用test()對某個字符串進行檢查,如果包含正則表達式的一個匹配結果,則返回true否則返回false。如:    代碼如下:var p = /java/i; p.test('javascript'); // true  
copyright © 萬盛學電腦網 all rights reserved