JavaScript 正則表達式的入門與使用


知道正則表達式已經很久了,粗略會看懂一些,不過以前沒有系統的學習,最近在看《JS權威指南》,剛好看到了看到正則表達式部分,就比較系統的學習了正則表達式。

先說一下正則表達式的一些基本知識

定義

正則表達式直接量被定義在一對斜杠之間(/)

直接量字符(前面7個感覺用的會比較多)

字母或數字(自身)

\o(NULL字符)

\n(換行符)

\t(制表符)

\v(垂直制表符)

\f(換頁符)

\r(回車)

\xnn(16進制數nn指定的拉丁字符)

\uxxxx(16進制數xxxx指定的Unicode字符)

\cX(控制字符^X)

 

字符類

[...](位於括號內的任意字符)

[^...](不位於括號內得任意字符)

.(除換行符和其他Unicode行終止符之外的任意字符)

\w([a-zA-Z0-9])

\W([^a-zA-Z0-9])

\s(任何Unicode空白符)

\S(任何非Unicode空白符,\w和\S不同

\d([0-9])

\D([^0-9])

[\b](退格直接量)特例

 

重復字符

{n,m}(匹配前一項至少n次至多m次)

{n,}(匹配前一項至少n次或更多次)

{n}(匹配前一項恰好n次)

?(匹配前一項0次或1次,等價{0,1})

+(匹配前一項1次或多次,等價{1,})

*(匹配前一項0次或多次,等價{0,})

非貪婪重復

如/a+/匹配1個或多個a,/a+?/只匹配一個a(前者為貪婪的,后者為非貪婪的)

 

選擇、分組、引用

|(選擇符,/a|b/可以匹配a或者b)

(...)(組合,定義子模式,\1表示第一個帶括號的子表達式,嵌套的時候按左括號分/(['"])[^\1]*\1/當第一個為單引號就\1為單引號,其他同理)

(?:...)(只組合,不能用\1引用,即不記憶與該數組匹配的字符)

\n(與第n個分組第一次匹配的字符相匹配)

 

錨字符

^(匹配字符串開頭,多行檢索時匹配一行的開頭)

$(匹配字符串結尾,多行檢索時匹配一行的結尾)

\b(匹配一個詞語的邊界)

\B(匹配非詞語邊界)

(?=p)(正前向聲明,要求接下來的字符都與模式p匹配)

(?!p)(反前向聲明,要求接下來打得字符不與模式p匹配)

 

標記(在/符號外說明)

i(執行大小寫不敏感匹配)

g(執行全局匹配,即找到所有匹配)

m(多行匹配)

 

用於匹配模式的String方法

seach(regExp)

該方法有一個參數,這個參數為正則表達式,如果不是正則表達式,也會用RegExp構造函數裝換為正則表達式。seach()不支持全局檢索,所以忽略標志g

replace(regExp,String)

該方法第一個參數為正則表達式,第二個參數為要替換的字符串。當有標志g時第二個參數會替換全部與正則表達式匹配的子串,如果沒有標志g,則替換第一個與模式匹配的子串。如果第一個參數為字符串,則直接檢索該字符串。

$n表示第n個子串。String=<aaa><bbb>;var x=String.replace(regExp,"<$1><$1>");則x的值為<aaa><aaa>。

match(regExp)

當有標志g時,該方法返回了包含匹配結果的數組。當沒有標志g時,也是返回一個數組,array[1]則為第一個子串。

 

split(x)

把調用的字符串分解為一個子串數組,分隔符是參數,參數也可以使用正則表達式,如/\*,s\s*/,逗號左右有一個或多個空格

 

RegExp對象

構造函數RegExp(String,gim),第一個參數為正則表達式主體的字符串,注意轉義字符的使用,第二個參數是正則表達式的標志,可省略。

RegExp對象方法

regExp.exec(String);

該方法與match()方法很類似,但是,不管加不加標志g,沒有找到匹配則返回null,如果找到,該方法只返回第一個匹配的字符串。如果有加標志g,第二次調用exec時則從regExp.lastIndex所指示的字符位置開始檢索,利用這個特點遍歷所有匹配,則可以達到match()加標志g的結果,不過結果不像match()一樣返回一個數組。

regExp.test(String),如果字符串包含正則表達式的一個匹配,則返回ture,當一個全局方法調用test()時,同樣regExp.lastIndex設置為匹配之后的字符的位置,這樣,test()方法也可以遍歷。

RegExp實例屬性(5個)

source 只讀 正則表達式文本

global 只讀的布爾值 說明是否有標志g

ignoreCase 只讀的布爾值 說明是否有標志i

multiline 只讀的布爾值 說明是否有標志m

lastIndex 可讀寫的整數

 


免責聲明!

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



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