JavaScript紅寶書筆記(六)---RegExp類型

1.var someDate = new Date(Date.parse("May 25, 2004"));可用來計算時間差正則表達式

//取得開始時間
var start = Date.now();
//調用函數
doSomething();
//取得中止時間
var stop = Date.now(),
result = stop – start;

new Date()也行,不過須要轉換成字符串來計算express

2.建立正則表達式:函數

var expression = / pattern / flags ;
var pattern1 = /[bc]at/i;

var pattern2 = new RegExp("[bc]at", "i");

正則表達式能夠帶有一個或多個標誌:測試

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;

3.因爲 RegExp 構造函數的模式參數是字符串,全部元字符都必須雙重轉義code

/\[bc\]at/             "\\[bc\\]at"
/\.at/                 "\\.at"
/name\/age/            "name\\/age"
/\d.\d{1,2}/           "\\d.\\d{1,2}"
/\w\\hello\\123/       "\\w\\\\hello\\\\123"

4.正則表達式字面量始終會共享同一個 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 構造函數在每次循環中建立正則表達式。由於每次迭代都會建立一個新的RegExp 實例,因此每次調用 test()都會返回 true索引

5.RegExp實例屬性:
RegExp 的每一個實例都具備下列屬性,經過這些屬性能夠取得有關模式的各類信息。
global:布爾值,表示是否設置了 g 標誌。
ignoreCase:布爾值,表示是否設置了 i 標誌。
lastIndex:整數,表示開始搜索下一個匹配項的字符位置,從 0 算起。
multiline:布爾值,表示是否設置了 m 標誌。
source:正則表達式的字符串表示,按照字面量形式而非傳入構造函數中的字符串模式返回。字符串

6.RegExp實例方法:input

RegExp 對象的主要方法是 exec(),該方法是專門爲捕獲組而設計的
var text = "mom and dad and baby";
var pattern = /mom( and dad( and baby)?)?/gi;
var matches = pattern.exec(text);
alert(matches.index); // 0
alert(matches.input); // "mom and dad and baby"
alert(matches[0]); // "mom and dad and baby"
alert(matches[1]); // " and dad and baby"
alert(matches[2]); // " and baby"

其中, index 表示匹配項在字符串中的位置,而 input 表示應用正則表達式的字符串

正則表達式的第二個方法是 test(),它接受一個字符串參數。在模式與該參數匹配的狀況下返回true;不然,返回 false。
var text = "000-00-0000";
var pattern = /\d{3}-\d{2}-\d{4}/;
if (pattern.test(text)){
    alert("The pattern was matched.");
}
相關文章
相關標籤/搜索