JavaScript之RegExp對象

來源:互聯網
上載者:User

標籤:介紹   轉義   reg   glob   運算式   last   pat   javascrip   source   

ECMAScript 通過 RegExp 類型來支援Regex。使用下面類似 Perl 的文法,就可以建立一個正
則運算式

var expression = / pattern / flags ;

其中的模式(pattern)部分可以是任何簡單或複雜的Regex,可以包含字元類、限定符、分組、
向前尋找以及反向引用。每個Regex都可帶有一或多個標誌(flags),用以標明Regex的行為。
Regex的匹配模式支援下列 3 個標誌。

? g:表示全域(global)模式,即模式將被應用於所有字串,而非在發現第一個匹配項時立即
停止;
? i:表示不區分大小寫(case-insensitive)模式,即在確定匹配項時忽略模式與字串的大小寫;
? m:表示多行(multiline)模式,即在到達一行文本末尾時還會繼續尋找下一行中是否存在與模
式匹配的項。

例子
/** 匹配字串中所有"at"的執行個體*/var pattern1 = /at/g;/** 匹配第一個"bat"或"cat",不區分大小寫*/var pattern2 = /[bc]at/i;/** 匹配所有以"at"結尾的 3 個字元的組合,不區分大小寫*/var pattern3 = /.at/gi;

 與其他語言中的Regex類似,模式中使用的所有元字元都必須轉義。Regex中的元字元包括:

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

這些元字元在Regex中都有一或多種特殊用途,因此如果想要匹配字串中包含的這些字元,
就必須對它們進行轉義。下面給出幾個例子。

/** 匹配第一個" [bc]at",不區分大小寫*/var pattern2 = /\[bc\]at/i;/** 匹配所有以"at"結尾的 3 個字元的組合,不區分大*/var pattern3 = /.at/gi;/** 匹配所有".at",不區分大小寫*/var pattern4 = /\.at/gi;

 前面舉的這些例子都是以字面量形式來定義的Regex。另一種建立Regex的方式是使用
RegExp 建構函式,它接收兩個參數:一個是要匹配的字串模式,另一個是可選的標誌字串。可以
使用字面量定義的任何錶達式,都可以使用建構函式來定義,如下面的例子所示。

/** 匹配第一個"bat"或"cat",不區分大小寫*/var pattern1 = /[bc]at/i;/** 與 pattern1 相同,只不過是使用建構函式建立的*/var pattern2 = new RegExp("[bc]at", "i");

 所有元字元都必須雙重轉義,那
些已經轉義過的字元也是如此,例如\n(字元\在字串中通常被轉義為\\,而在Regex字串中就
會變成\\\\)。下表給出了一些模式,左邊是這些模式的字面量形式,右邊是使用 RegExp 建構函式定義
相同模式時使用的字串。

使用Regex字面量和使用 RegExp 建構函式建立的Regex不一樣。在 ECMAScript 3 中,
Regex字面量始終會共用同一個 RegExp 執行個體,而使用建構函式建立的每一個新 RegExp 執行個體都是

一個新執行個體。來看下面的例子。

var re = null,i;for (i=0; i < 10; i++){re = /cat/g;re.test("catastrophe");}for (i=0; i < 10; i++){re = new RegExp("cat", "g");re.test("catastrophe");}

在第一個迴圈中,即使是迴圈體中指定的,但實際上只為/cat/建立了一個 RegExp 執行個體。由於實
例屬性(下一節介紹執行個體屬性)不會重設,所以在迴圈中再次調用 test()方法會失敗。這是因為第一
次調用 test()找到了"cat",但第二次調用是從索引為 3 的字元(上一次匹配的末尾)開始的,所以
就找不到它了。由於會測試到字串末尾,所以下一次再調用 test()就又從開頭開始了。
第二個迴圈使用 RegExp 建構函式在每次迴圈中建立Regex。因為每次迭代都會建立一個新的
RegExp 執行個體,所以每次調用 test()都會返回 true。

 

RegExp的執行個體屬性

RegExp 的每個執行個體都具有下列屬性,通過這些屬性可以取得有關模式的各種資訊。

? global:布爾值,表示是否設定了 g 標誌。
? ignoreCase:布爾值,表示是否設定了 i 標
? lastIndex:整數,表示開始搜尋下一個匹配
? multiline:布爾值,表示是否設定了 m 標誌
? source:Regex的字串表示,按照字面
通過這些屬性可以獲知一個Regex的各方面
在模式聲明中。例如:

var pattern1 = /\[bc\]at/i;alert(pattern1.global); //falsealert(pattern1.ignoreCase); //truealert(pattern1.multiline); //falsealert(pattern1.lastIndex); //0alert(pattern1.source); //"\[bc\]at"var pattern2 = new RegExp("\\[bc\\]at", "i");alert(pattern2.global); //falsealert(pattern2.ignoreCase); //truealert(pattern2.multiline); //falsealert(pattern2.lastIndex); //0alert(pattern2.source); //"\[bc\]at"

 

RegExp執行個體方法

 

JavaScript之RegExp對象

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.