JS與正則表達式相關的方法總結

regexp實例方法

exec()javascript

  1. exec()是專門爲捕獲組設計的方法,exec接受一個參數,即須要應用正則的字符串,返回一個數組,或者沒有匹配的時候返回null。注:/^/.exec(‘str’)返回一個數組,第一項爲」。由於在’str’中在字符串開始的地方存在^,不算沒有匹配。
  2. exec()返回的數組格式:[‘總匹配字符串’,捕獲1,捕獲2…,index,input],其中若是沒有捕獲組,數組中就沒有捕獲項,若是有捕獲組,可是沒有捕獲到字符,則數組中對應的捕獲項爲undefined。這是一個Array的實例,可是有兩個額外的屬性:index 表示匹配項在字符串中的位置,而 input 表示應用正則表達式的字符串。java

    注:能夠給array添加屬性,輸出的格式以下:
    var a = new Array(1,2);
    a.input = 'a';
    console.log(a); //[ 1, 2, input: 'a' ]
  3. 對於 exec()方法而言,即便在模式中設置了全局標誌g,它每次也只會返回一個匹配項。在不設置全局標誌的狀況下,在同一個字符串上屢次調用 exec()將始終返回第一個匹配項的信息。而在設置全局標誌的狀況下,每次調用 exec()則都會在字符串中繼續查找新匹配項,而且該正則表達式的lastindex屬性會改變正則表達式

    eg:
    var a = /w/g;
    
    var b = 'aawasdadwaaw';
    for(var i=0;i<3;i++){
        console.log(a.lastIndex);
        console.log(a.exec(b));
    
    }
    //0
    //[ 'w', index: 2, input: 'aawasdadwaaw' ]
    //3
    //[ 'w', index: 8, input: 'aawasdadwaaw' ]
    //9
    //[ 'w', index: 11, input: 'aawasdadwaaw' ]

test()數組

  1. test()接受一個字符串參數。在模式與該參數匹配的狀況下返回 
    true;不然,返回 false。在只想知道目標字符串與某個模式是否匹配,但不須要知道其文本內容的 
    狀況下,使用這個方法很是方便。所以,test()方法常常被用在 if 語句中,用法:函數

    var text = "000-00-0000";
    var pattern = /\d{3}-\d{2}-\d{4}/;
    if (pattern.test(text)){
        alert("The pattern was matched.");
    }

字符串的模式匹配方法

match()spa

  1. match函數在非全局狀況與exec函數返回結果徹底一致,只是match函數是String的實例方法,調用方法爲’str’.match(regexp);
  2. match函數在全局模式下與exec函數返回結果不一樣,match會返回全部匹配項組成的一個數組,沒有input和index屬性,而且僅僅返回整個的匹配項,即忽略正則表達式中的捕獲組。 
    eg: 
    var a = /(w)a/g;設計

    var b = 'aawasdadwaaw';
    for(var i=0;i<3;i++){
        console.log(a.lastIndex);
        console.log(b.match(a));
    
    }
    //0
    //[ 'wa', 'wa' ]
    //0
    //[ 'wa', 'wa' ]
    //0
    //[ 'wa', 'wa' ]

search()code

  1. search接受一個正則表達式參數,返回字符串中第一個匹配項的索引,若是沒有找到匹配項,返回-1,不管正則表達式是否設置了g標誌,都會返回第一個匹配項的索引。

replace()regexp

  1. replace是字符串替換方法,接受兩個參數,匹配的正則表達式(或者一個字符串)和替換用的字符串。
  2. 若是第二個參數是字符串,能夠在字符串中插入特殊的字符序列索引

    $$ $
    $& 匹配整個模式的子字符串(不是輸入的字符串)。與RegExp.lastMatch的值相同
    $' 匹配的子字符串右邊的內容。與RegExp.rightContext的值相同
    $` 匹配的子字符串左邊的內容。與RegExp.leftContext的值相同
    $n 匹配第n個捕獲組的子字符串,其中n等於0~9。例如,$1是匹配第一個捕獲組的子字符串,$2是匹配第
    二個捕獲組的子字符串,以此類推。若是正則表達式中沒有定義捕獲組,則使用空字符串
    $nn 匹配第nn個捕獲組的子字符串,其中nn等於01~99。例如,$01是匹配第一個捕獲組的子字符串,$02
    是匹配第二個捕獲組的子字符串,以此類推。若是正則表達式中沒有定義捕獲組,則使用空字符串

    注:javascript高級程序設計第三版將$’與$`的用法寫反了。

  3. 若是第二個參數是函數,在只有一個匹配項(即與模式匹配的字符串)的狀況下,會向這個函數傳遞 3 個參數:模式的匹配項、模式匹配項在字符串中的位置和原始字符串。在正則表達式中定義了多個捕獲組的狀況下,傳遞給函數的參數依次是模式的匹配項、第一個捕獲組的匹配項、第二個捕獲組的匹配項……,但最後兩個參數仍然分別是模式的匹配項在字符串中的位置和原始字符串。這個函數應該返回一個字符串,表示應該被替換的匹配項。

    在全局模式下,會一次次調用這個函數,直到這個字符串處理完成。

split()

  1. split方法也能夠指定正則表達式,而且還能夠設置第二個參數來指定返回的項數。 
    高程上的例子:

    var colorText = "red,blue,green,yellow";
    var colors1 = colorText.split(","); //["red", "blue", "green", "yellow"]
    var colors2 = colorText.split(",", 2); //["red", "blue"]
    var colors3 = colorText.split(/[^\,]+/); //["", ",", ",", ",", ""]
相關文章
相關標籤/搜索