一、定義正規表示式的方法
定義正規表示式的方法有兩種:建構函式定義和正規表示式直接量定義。例如:
正規表達式直接量字元
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。如:
replace():它用來執行檢索與取代。接收兩個參數,第一個是正規表示式,第二個是要進行替換的字串。正規表示式如果設定的修飾符g,則進行全域替換,否則只替換匹配的第一個子字串。如果第一個參數不是正規表示式,則直接搜尋該字串,而不是將其轉換為正規表示式。如:
match():它的參數是正規表示式,若不是則透過RegExp轉換,傳回的則是由符合結果組成的陣列。如果設定了修飾符g則進行全域匹配。如:
二、RegExp物件
每個RegExp物件都有5個屬性。屬性source是一個唯讀字串,包含正規表示式的文字。屬性global是只讀布林值,用以說明這個正規表示式是否帶有修飾符g。屬性ignoreCase是一個只讀布林值,用以說明這個正規表示式是否帶有修飾符i。屬性multiline是一個只讀布林值,用以說明這個正規表示式是否帶有修飾符m。屬性lastIndex是一個可讀可寫的整數,如果匹配模式帶有g修飾符,這個屬性會儲存整個字串中下一次檢索的開始位置。
另外一個方法是test(),它的參數是一個字串,用test()對某個字串進行檢查,如果包含正規表示式的一個符合結果,則傳回true否則回傳false。如: