Amazon Ads

2014年3月24日 星期一

【JS筆記】勇敢面對JavaScript中正規表示式(Regular Express)

首先,若想要有個方便的工具來練習JavaScript,可以看看使用Rhino shell來執行JavaScript這一篇。

根據W3C的定義,在JavaScript中,正規表示式(regular expression)是一個描述字元模式 (a pattern of characters) 的物件,它可以用來查看某一段文字是否符合我們定義的文字模式,也可以用來找尋或取代文字中符合模式的字串,而且在StringRegExp中定義了一些方法,搭配正規表示式,就能對文字進行強大的模式匹配、搜尋或取代的功能。

我們要得到一個regular expression的物件的話,可以使用下列語法:
var pt = new RegExp(pattern, modifiers);
或是
var pt = /pattern/modifiers; //我自己實作上比較常用這一方式
上列語法中:pattern是我們要定義的「表式示的模式」(pattern of expression)。

modifiers指明我們想要做是「不分大小寫」、「全部」或「多行」的比對,定義如下:

i:做不分大小寫(case-0insensitvie matching)的比對。

g:對全部要比對的字串,做比對,而不是比對成功後就停下來。

m:做多行的比對。

用些例子來說明吧!
//這個表示式的意思是,要找比對的字串中,有沒有含有字母「e」或「E」。
var reg1 = new RegExp('e', 'i'); 
//或者 var reg1 = /e/i; 請注意,這裡不用單引號或雙引號來包字串

//然後用來測試字串
reg1.test('e'); //結果 true
reg1.test('E'); //結果 true
這次若不加i再測試看看:
//這個表示式的意思是,要找比對的字串中,有沒有含有字母「e」,
//沒加「i」,所以有分大小寫
var reg1 = new RegExp('e');
reg1.test('e'); //結果為 true
reg1.test('E'); //結果為 false
從上列結果來看,若有加imodifier的話,則在比對時,就不會去分大小寫。

再來看g這個modifier,要看這個參數的功能我們要用Stringmatch()函式來說明。
var reg = /has/;
var para = 'He has a friend who has a dog that has long tail';
para.match(reg);    //結果為has
在上列程式中,match()函式會以array object回傳比對成功的結果,雖然在我們比對的字串para中有三個has,但這裡回傳的陣列只包含了第一個比對成功的字串。

再來加入g參數:
var reg = /has/g;
para.match(reg); //結果 has,has,has
現在回傳的陣列長度為3,包含了三個「has」了。

上列的也可以一起混用,如:
var reg = /has/gi; //比對不分大小寫,而且要比對到字串結尾為止
para.match(reg); //結果 has,has,has
至於m這個modifier,目前還沒想到比較好的例子,在這裡先跳過了。

接下來,我要開始探索比對模式的部份。

如果你想學好JavaScript,我推薦:

還有: