實戰JS正規表示式

發表於2016-02-04

正規表示式是一種文字模式的匹配工具。

[新建正規表示式]:

區別在於:

1.採用字面量的寫法新建的正規表示式物件在程式碼編譯時就會生成,是平常開發中常用的方式;

2.採用建構函式生成的正則物件要在程式碼執行時生成。

 [使用正規表示式]:

正則物件的方法是指這樣使用的: RegExp物件.方法(字串)

字串物件的方法是這樣使用:字串.方法(RegExp物件)

一、 正則物件的屬性和方法

1.1 正則物件的屬性:

這樣用:

 

1.2 test方法

test方法返回布林值,用來驗證字串是否符合某個模式。如果正規表示式帶有g修飾符,則每一次test方法都從上一次匹配結束的位置開始匹配。

使用了g修飾符的正則物件,表示要記錄搜尋的位置,接著使用test方法,每次開始搜尋的委會都是上一次匹配的後一個位置:

如果正規表示式是一個空字串,則會匹配所有的字串,但前提是使用new RegExp()的方式:

 

1.3 exec方法

exec()返回匹配的結果,匹配成功exec方法返回裝有匹配結果的陣列,匹配失敗返回null:

如果正規表示式包含圓括號,則返回的陣列會包括多個元素。首先是整個匹配成功的結果,後面是圓括號裡匹配成功的結果,如果有多個圓括號,他們的匹配成功的結果都會成為陣列元素:

對於呼叫exec方法後返回的陣列具有以下兩個屬性:

同樣,給正規表示式加上g修飾符就可以多次使用exec方法,下一次搜尋的位置從上一次成功匹配結束的位置開始。

如果正則物件是一個空字串:

 

二、字串物件的方法

 

2.1 match()方法

字串物件的match方法與正則物件的exec方法比較類似:

但是如果正規表示式帶有g修飾符,那麼match方法與exec方法就有差別了:

可以看到match返回了所有成功匹配的結果,但是exec方法只返回了一個。

 

2.2 search方法

search方法返回匹配成功的位置在整個字串中的索引,如果沒有匹配成功任何字元則返回-1,search方法會自己忽略g修飾符。

 

2.3 replace方法

str.replace(‘搜尋模式’,’替換的內容’);

可以看到,如果正規表示式不帶g修飾符,那麼replace方法會替換第一個匹配成功的結果,如果加上了g修飾符,那麼會替換所有匹配成功的值。

replace方法的第二個引數可以使用$符號,用來指代所要替換的內容:

replace方法的第二個引數也可以是函式,用於將第一個引數匹配到的值替換為函式返回值。

同時,作為replace方法的第二個引數的函式也可以由多個引數。它的第一個引數是整個匹配的內容,第二個引數是組匹配(這時有多少個組匹配就有多少個引數),此外最後還可以新增兩個引數,倒數第二個引數是撲捉到的內容在整個字串中的位置,最後一個引數是原字串。

 

2.4 split() 方法

split(‘字串的分割正則’,‘返回陣列的最大成員數’);返回分割後各部分組成的陣列。

可以變換正則的匹配規則來分割字串。

上面正則的匹配規則是以0或多個a來進行分割,如果加上括號則括號匹配的部分也就是分割規則也會作為陣列成員返回。

 

三、使用正規表示式

正規表示式不僅靈活還很強大,用它能很簡潔的實現很多實用的功能,下面簡單列舉一些:

3.1給字串加千分符

其中的(?=exp)用來匹配exp前面的位置,(?!exp)匹配後面跟的不是exp的位置,他們都是零寬斷言。

如果要是不用正規表示式的話,程式碼會多些:

3.2字串中出現次數最多的字元

其中1代表分組1匹配的文字。

3.3 在多行中使用正規表示式

^符號用來匹配輸入/字串的開始。如果多行(multiline)標誌被設為 true,該字元也會匹配一個斷行(line break)符後的開始處。

3.4 從url中提取子域名

上面的正則匹配/開始的字串匹配到第一個.就停止了,http://長度為7,所以用了substr(7)之後就會返回子域名了。

3.5 分割Unicode字元

通常用來匹配字元的w和W只會匹配基本的ACSCII字元,要匹配Unicode字元的話就要另做處理了:

3.6 在location物件中使用正則

這裡有個我越看越暈的例子,額:

來自小鬍子==。[玩轉正則之highlight高亮]

四、其他

正規表示式的收集:

[常用的正規表示式收集]

[ js常用正規表示式]

參考資料:

[RegExp MDN]

[玩轉正則之highlight高亮]

 

這裡我只是總結了正規表示式相關的方法和屬性,強烈建議閱讀:正規表示式30分鐘入門教程    它教會你如何寫正規表示式,再結合文章上面提到的方法,寫著寫著,正則就不是那麼遙不可及了,非常實用喔。

 

相關文章