首頁 >web前端 >js教程 >JavaScript中的正規表示式簡明總結_基礎知識

JavaScript中的正規表示式簡明總結_基礎知識

WBOY
WBOY原創
2016-05-16 16:53:091136瀏覽

一、定義正規表示式的方法

定義正規表示式的方法有兩種:建構函式定義和正規表示式直接量定義。例如:

複製程式碼 程式碼如下:
var reg1 = new RegExp('d{5, 11} '); // 透過建構子定義
var reg2 = /d{5, 12}/; // 透過直接量定義

正規表達式直接量字元
       o:NUL字元(u0000)
       t:製表符(u0009)
     t:製表符(u0009)       f:換頁符(u000C)
       r:回車符(u000D)
     r:回車符(u000D)
   
       uxxxx:由十六進位數xxxx指定的Unicode字符,例如u0009等價於
       cX:控製字元^X,例如,cJ等價於換錨符n
正規表示🎜>       ^:符合字串的開頭,在多重擷取字串的結尾,在多行檢索中,符合一行的結尾
       $:將字串的結尾,在多重擷取中,符合一行字的結尾
     邊界,簡言之,就是位於字元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空格符
   不同
       d:任何ASCII數字,等價於[0-9]
       D:除了ASCII數字之外的任何字符,等價於[^0-9]  直接量(特例)
正規表示式的重複字元語法
       {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 代碼如下:

var d = '55 ff 33 77 tt'hhmatch (/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
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn