2. 建構函式`regexp(正規表示式,修飾符)`
正規表示式還可以跟上修飾符(/exp/修飾符
)限制正規表示式的行為。
介紹三個常用的修飾符:
修飾符
作用 i
忽略大小寫
g 全域性匹配
m 多行匹配
修飾符i
表示匹配時忽略大小寫,例如:
reg =
/abde/i
;console.
log(reg.
test
(" abde "))
;
修飾符g
表示全域性匹配。在沒有修飾符g
的情況下,只會進行第一次
匹配,也就是說,只要找到符合正規表示式的子串,就停止匹配。
舉例:
reg =
/a/;
str =
"aaabbaa"
;str = str.
replace
(reg,
"b")
;console.
log(str)
;
在上面的例子中,想要將aaabbaa
中的a
都替換為b
,但是最後的結果式baabbaa
,這是因為正規表示式/a/
只會進行第一次匹配
,在第一次匹配之後,就停止匹配。
如果想要匹配完整的字串,需要用到修飾符g
將上面**中的正規表示式修改為:
修飾符m
表示多行匹配。
例如,有以下字串aaabbaa\naaabbaa
。如果想要通過replace()
方法,將字串改為baabbaa\nbaabbaa
,也就是說將這個字串(有兩行)的每一行開頭的a
修改為b
。
舉例:
reg =
結果和預想的不一樣,接下來分析原因在匹配時,如果正規表示式沒有被m修飾,在匹配字串時,字串只有乙個開頭^
和結束$
;如果正規表示式被修飾符m修飾,表示每一行的開頭都可以和^
匹配,每一行的結尾都可以被$
匹配。上面的例子中,由於不是全域性匹配,則第一次匹配成功後就結束
也就是說,上面的例子仍然需要全域性匹配,正規表示式應該是/^a/mg(修飾符可以組合使用,沒有順序限制)
為了加深對修飾符m的理解,僅使用g
修飾正規表示式:
reg =
/^a/g
;str =
"aaabbaa\naaabbaa"
結果也僅僅是修改了第乙個a
,因為沒有使用m
,在匹配時,認為只有乙個開頭和乙個結尾。如果加上m,每一行都有自己的開頭(可以和^
匹配)和自己的結尾除了使用「字面量」的方式建立正規表示式物件,還可以使用建構函式建立正規表示式。
先來回顧一下通過字面量建立正規表示式的方式:
var reg = /表示式/修飾符
使用建構函式建立:
var reg = new regexp(表示式, 修飾符)
舉例:
var reg1 =
/^abcd$/ig
;var reg2 =
newregexp
("^abcd$"
,"ig");
console.
log(
"reg1 = "
+ reg1)
;console.
log(
"reg2 = "
+ reg2)
;
使用字面量建立時,表示式的內容不用使用""
,然而,使用建構函式時,第乙個引數傳入的是乙個字串,字串的內容是表示式,因為是字串,所以要使用雙引號使用字面量和使用建構函式,都可以建立正規表示式物件。採用字面量建立的正規表示式是「死」的,而使用建構函式,表示式的內容(字串)可以使用變數代替,因此使用建構函式建立更加靈活。 正規表示式修飾符
修飾符 在正規表示式裡面的修飾符可以改變正則的很多特性,使得正規表示式更加適合你的需要 注意 修飾符對於大小寫是敏感的,這意味著 e 並不等於 e 正規表示式裡面的修飾符如下 i 如果在修飾符中加上 i 則正則將會取消大小寫敏感性,即 a 和 a 是一樣的。m 預設的正則開始 和結束 只是對於正則字...
正規表示式 修飾符
正規表示式 修飾符 標記 標記也稱為修飾符,正規表示式的標記用於指定額外的匹配策略。標記不寫在正規表示式裡,標記位於表示式之外,格式如下 pattern flags i ignore 不區分大小寫 將匹配設定為不區分大小寫,a a沒有區別 g global 全域性匹配 查詢所有的匹配項 m mult...
正規表示式修飾符
正規表示式中常用的模式修正符有i g m s u x a d e 等。它們之間可以組合搭配使用。i不區分 ignore 大小寫 例如 abc i 可以匹配 abc abc abcg全域性 global 匹配例如 var str aaaaaaaa var reg1 a str.match reg1 結...