1. 程式人生 > >Javascript高階程式設計學習筆記(15)—— 引用型別(4)RegExp型別

Javascript高階程式設計學習筆記(15)—— 引用型別(4)RegExp型別

JS中處理字串最常用的應該就是正則了

同樣正則(RegExp)型別也是JS中引用型別的一種

ECMAScript通過 RegExp型別 來支援正則表示式

 

建立正則

var expression = / pattern / flags;

在上面建立正則例項中 pattern 部分可以是任意簡單或複雜的正則表示式,每個正則表示式可以有一個或多個 flags 來標明正則的行為

 

使用建構函式建立

var expression = new RegExp("pattern","flags"); // 接收兩個字串引數

PS. 由於該建構函式的引數為字串,所以需要雙重轉義

比如:

/ \[bc\]at / 等效於 "\\[bc\\]at"

 

兩種建立方式的區別在於(ES3中存在該區別,ES5兩者沒有區別):

字面量(表示式)建立的正則會共享一個正則例項,而建構函式每次都會建立一個新的例項

對於上述差異我在使用IE11模擬IE5時並未體現出有此差異,這一點大家看看就好

 

正則支援以下3種標誌(ES5)

g:全域性模式即找到匹配項後仍會繼續向後查詢,直到掃描完整個字串

i :不區分大小寫模式、即在正則匹配時忽略正則的大小寫

m:多行模式,即一行文字匹配完成後繼續匹配下一行

 

元字元:

元字元就是指在正則中具有特殊功能的字元,如果希望正則匹配這些字元,那麼則需要對這些字元進行轉義

( [  { \ ^ $ | ) ? * + . ] }

 

RegExp的例項屬性

每個正則例項都有以下屬性:

global:是否為全域性匹配

ignoreCase:是否忽略大小寫

lastIndex:開始下一次搜尋的起始位置

multiline:是否多行匹配

source:正則表示式的字串表示,格式為字面量形式

 

以上屬性雖然詳細描述了正則狀態,但是實際用處並不大,因為在建立這些例項時我們已經顯式地聲明瞭這些資訊

 

RegExp的例項方法

exec()該方法主要為捕獲組設計,接收一個引數即要應用正則規則的字串

返回一個帶有index、input屬性的Array例項

index屬性表示匹配項在整個字串中的位置

input 屬性表示該方法傳入的引數字串也就是“輸入”

對於返回的Array例項第一項是與正則規則匹配的字串

其它項是正則捕獲組匹配的字串

沒有匹配項返回null

 

PS.對於全域性模式每次也只返回一個匹配項,重複呼叫會從上次停止的地方繼續,直到比對完整個字串;對非全域性模式的重複呼叫結果始終的匹配的第一個

 

test()該方法主要用於我們不關心匹配項是什麼只關心是否匹配的情況

接收一個引數即需要匹配的字串,返回true或false,一般用於條件判斷中

 

繼承方法:

關於RegExp繼承自Object 的方法

1. toLocaleString、toString 都會返回正則表示式的字面量

2.valueOf 返回正則本身

 

RegExp建構函式屬性

這些屬性的值會根據最近一次正則匹配的結果而有所變化

這些屬性都有兩種訪問方式,一種是長屬性,一種是短屬性

 

長屬性                    短屬性                              內容

input                         $_                        最近一次匹配的字串

lastMatch                 $&                            最近一次的匹配項

lastParen                  $+                        最近一次的匹配的捕獲組

leftContext                $`                            lastMatch之前的文字

multiline                    $*                     是否所有表示式都是多行模式(該屬性已廢除)

rightContext              $'                            lastMatch之後的文字

 

PS. 對於短屬性中無效的ECMA字元需要使用中括號來訪問 如 RegExp["$`"]

除此而外就算test方法只返回 Boolean 其他的相應屬性也會在上面的屬性獲取到

 

PS. $1~$9分別對應9個捕獲組

 

Js中正則的侷限性

JS中的正則雖然比較完備,但是仍缺少一些語言(Perl)所支援的高階正則表示式的特性

1.向後查詢

2.交集並集

3.原子組

4.命名捕獲組

5.s單行  x無間隔 模式

6.條件匹配

7.正則表示式註釋

 

以上就是JS中正則的部分,詳情見MDN

即便如此,JS中的正則物件還是能夠滿足我們平時絕大部分的匹配任務