怎樣建立正規表示式?

Lurkers.發表於2018-06-22

建立正規表示式和建立字串類似,建立正規表示式提供了兩種方法,一種是採用new運算子,另一個是採用字面量方式。

 

1.兩種建立方式

var box = new RegExp('box');                            //第一個引數字串

var box = new RegExp('box', 'ig');                      //第二個引數可選模式修飾符

 

模式修飾符的可選引數

參  數

含  義

i

忽略大小寫

g

全域性匹配

m

多行匹配

 

var box = /box/;                                               //直接用兩個反斜槓

var box = /box/ig;                                             //在第二個斜槓後面加上模式修飾符

 

 

 

 

2.測試正規表示式

RegExp物件包含兩個方法:test()和exec(),功能基本相似,用於測試字串匹配。test()方法在字串中查詢是否存在指定的正規表示式並返回布林值,如果存在則返回true,不存在則返回false。exec()方法也用於在字串中查詢指定正規表示式,如果exec()方法執行成功,則返回包含該查詢字串的相關資訊陣列。如果執行失敗,則返回null。

 

RegExp物件的方法

方  法

功  能

test

在字串中測試模式匹配,返回true或false

exec

在字串中執行匹配搜尋,返回結果陣列

 

/*使用new運算子的test方法示例*/

var pattern = new RegExp('box', 'i');                  //建立正則模式,不區分大小寫 

var str = 'This is a Box!';                                   //建立要比對的字串

alert(pattern.test(str));                                       //通過test()方法驗證是否匹配

 

/*使用字面量方式的test方法示例*/

var pattern = /box/i;                                          //建立正則模式,不區分大小寫

var str = 'This is a Box!';

alert(pattern.test(str));

 

/*使用一條語句實現正則匹配*/

alert(/box/i.test('This is a Box!'));                       //模式和字串替換掉了兩個變數

/*使用exec返回匹配陣列*/

var pattern = /box/i;

var str = 'This is a Box!';

alert(pattern.exec(str));                                     //匹配了返回陣列,否則返回null

 

 

3.使用字串的正規表示式方法

除了test()和exec()方法,String物件也提供了4個使用正規表示式的方法。

 

String物件中的正規表示式方法

方  法

含  義

match(pattern)

返回pattern中的子串或null

replace(pattern, replacement)

用replacement替換pattern

search(pattern)

返回字串中pattern開始位置

split(pattern)

返回字串按指定pattern拆分的陣列

 

/*使用match方法獲取獲取匹配陣列*/

var pattern = /box/ig;                                        //全域性搜尋

var str = 'This is a Box!That is a Box too';

alert(str.match(pattern));                                   //匹配到兩個Box,Box
       alert(str.match(pattern).length);                          //獲取陣列的長度

 

/*使用search來查詢匹配資料*/

var pattern = /box/ig;

var str = 'This is a Box!That is a Box too';

alert(str.search(pattern));                                   //查詢到返回位置,否則返回-1

 

PS:因為search方法查詢到即返回,也就是說無需g全域性

 

/*使用replace替換匹配到的資料*/

var pattern = /box/ig;

var str = 'This is a Box!That is a Box too';

alert(str.replace(pattern, 'Tom'));                        //將Box替換成了Tom

 

/*使用split拆分成字串陣列*/

var pattern = / /ig;

var str = 'This is a Box!That is a Box too';

alert(str.split(pattern));                                      //將空格拆開分組成陣列

 

RegExp物件的靜態屬性

屬  性

短  名

含  義

input

$_

當前被匹配的字串

lastMatch

$&

最後一個匹配字串

lastParen

$+

最後一對圓括號內的匹配子串

leftContext

$`

最後一次匹配前的子串

multiline

$*

用於指定是否所有的表示式都用於多行的布林值

rightContext

$'

在上次匹配之後的子串

 

/*使用靜態屬性*/

var pattern = /(g)oogle/;

var str = 'This is google';

pattern.test(str);                                                //執行一下

alert(RegExp.input);                                         //Thisis google!

alert(RegExp.leftContext);                                //Thisis

alert(RegExp.rightContext);                              //!

alert(RegExp.lastMatch);                                   //google

alert(RegExp.lastParen);                                   //g

alert(RegExp.multiline);                                   //false

 

PS:Opera不支援input、lastMatch、lastParen和multiline屬性。IE不支援multiline屬性。

所有的屬性可以使用短名來操作

RegExp.input可以改寫成RegExp['$_'],依次類推。但RegExp.input比較特殊,它還可以寫成RegExp.$_。

RegExp物件的例項屬性

屬  性

含  義

global

Boolean值,表示g是否已設定

ignoreCase

Boolean值,表示i是否已設定

lastIndex

整數,代表下次匹配將從哪裡字元位置開始

multiline

Boolean值,表示m是否已設定

Source

正規表示式的源字串形式

 

/*使用例項屬性*/

var pattern = /google/ig;

alert(pattern.global);                                         //true,是否全域性了

alert(pattern.ignoreCase);                                  //true,是否忽略大小寫

alert(pattern.multiline);                                     //false,是否支援換行

alert(pattern.lastIndex);                                     //0,下次的匹配位置

alert(pattern.source);                                         //google,正規表示式的源字串

 

var pattern = /google/g;

var str = 'google google google';

pattern.test(str);                                                //google,匹配第一次

alert(pattern.lastIndex);                                     //6,第二次匹配的位

 

PS:以上基本沒什麼用。並且lastIndex在獲取下次匹配位置上IE和其他瀏覽器有偏差,主要表現在非全域性匹配上。lastIndex還支援手動設定,直接賦值操作。


相關文章