在javascript中我們創建正則表達式有兩種方式:
第一種:直接定義並規定模式
var expression=/pattern/flag
其中,pattern是我們的匹配模式,flag是匹配標記,如‘g’表示全部匹配完才停止,‘i’表示不區分大小寫,‘m’則表示多行匹配
例如:匹配字符串中所有“at”
var pattern1=/at/g
匹配字符串中所有“at”,且不區分大小寫
var pattern2=/at/gi(注意這個匹配標誌連在一起寫)
第二種:用RegExp構造函數
var expression1=new RegExp("pattern","flag")
構造函數中需要傳的是字符串,如果我們的字符串中包含元字符,那麼我們需要對一些元字符如:{ [ ] ? ^ & \ | * + .}進行轉義,就是在這些字符前面加‘\’
例如:匹配第一個“ [fd]uck”,不區分大小寫
var pattern3=new RegExp("\[fd\]uck","i");
這種方式與第一種方式創建的正則表達式不一樣,第一種共享同一實例,而用構造函數則每次都創建一個實例。
來看下面的例子
var reg=null,i;
for(i=0;i<10;i++){
reg=/cat/g;
reg.test("catagory");
}
for(i=0;i<10;i++){
reg=new RegExp("cat","g");
reg.test("catagory");
}
在第一個循環中只會爲/cat/創建一個RegExp實例,由於實例屬性並不會重置,當進入第二次循環時,test方法便會失敗,因爲他是從上一次匹配的索引開始。
而第二個循環每次都創建了一個RegExp實例,所以每次都會返回TRUE。
PS:不管在什麼語言中,我們只需記住,在需要進行轉義的地方我們就用“\”(當然c語言還有“%”),例如要輸出“\abc”,那麼我們的字符串應該是“\\abc”,那如果我們要輸出“\\abc”呢,
那麼我們的字符串應該是“\\\\abc”,其中每個紅色的反斜槓對後面的反斜槓進行轉義。