正則表達式
是一個描述字符模式的對象。
JavaScript中的正則表達式用RegExp對象表示。
正則表達式的定義
正則表達式的創建:
- 可以使用RegExp()構造函數來創建RegExp對象.
- 也可以通過一種特殊的直接量語法來創建。
var pattern = /s$/ == var pattern = new RegExp("s$");
//運行這段代碼創建一個新的RegExp對象,并將它賦值給變量pattern,這個特殊的RegExp對象用來匹配所有以字母“s”結尾的字符串。
正則表達式的模式規則是由一個字符序列組成的。包括所有字母和數字在內,大多數的字符都是按照直接量僅描述待匹配的字符的。
1. 直接量字符
正則表達式中的所有字母和字符都是按照字面含義進行匹配的。
正則表達式中的直接量字符.png
通行規則:
- 如果想在正則表達式中使用這些字符的直接量進行匹配,則必須使用前綴\。
- 對于想按照直接量進行匹配的字母和數字盡量不要用反斜線對其轉義。
- 要想在正則表達式中按照直接量匹配反斜線本身,則必須使用反斜線對其轉義。"/\\/".
2. 字符類
將直接量字符單獨放進方括號內就組成了字符類。
字符類.png
3. 重復
正則表達式的重復字符語法(盡可能多的匹配)
重復.png
?。。τ??"、"*",由于字符內可能匹配0個字符,因此他們允許什么都不匹配。
4. 非貪婪的重復
非貪婪重復是匹配盡可能少的,語法為在待匹配字符后加“?”,如 ??、+?。
5. 選擇、分組和引用
- 字符"|"用于分隔供選擇的字符
選擇項的嘗試匹配次序是從左到右,直到發現了匹配項。
eg: /ab|cd|ef/可以匹配字符串"ab"、"cd"、"ef"。 - 圓括號有三種作用:
- 把單獨的項組合成子表達式。
- 在完整的模式中定義子模式。
- 允許在同一正則表達式的后部引用前面的子表達式。
- 正則表達式不允許用雙引號括起的內容中有單引號。
- 在正則表達式中不用創建帶數字編碼的引用,也可以對子表達式進行分組,以 ("?:" 和 ")"分組。
6.指定匹配位置
正則表達式中的錨字符:
^ 匹配字符串的開頭,在多行檢索中,匹配一行的開頭
$ 匹配字符串的結尾
\b 匹配一個單詞的邊界
\B 匹配非單詞的邊界
(?=p) 零寬正向先行斷言,要求接下來的字符都與p匹配,但不能包括匹配P的那些字符
(?|p) 零寬負向先行斷言,要求接下來的字符不與P匹配。
7. 修飾符
- 修飾符放在"/"符號之外。
- 修飾符"i"用以說明模式匹配是不區分大小的。
- 修飾符"g"說明模式匹配應該是全局的。
- 修飾符"m"在多行模式中執行匹配,^匹配一行的開頭和字符串的開頭,$匹配行的結束和字符串的結束。
用于模式匹配的String方法
- search()
參數為一個正則表達式,返回第一個與之匹配的子串的起始位置(不支持全局檢索)。 - replace()
其中第一個參數是一個正則表達式,第二個參數是要進行替換的字符串。 - match()
唯一參數就是一個正則表達式,返回的是一個由匹配結果組成的數組。 - exec()
返回一個數組,帶有index和input屬性。
RegExp對象
RegExp()構造函數帶有兩個字符串參數,其中第二個參數是可選的,第一個參數包含正則表達式的主題部分。
var zipcode = new RegExp("\d{5}","g");
RegExp屬性
- source屬性
是一個只讀字符串,包含正則表達式的文本。 - global屬性
是一個只讀的布爾值,用以說明這個正則表達式是否帶有修飾符g。 - ignoreCase屬性
也是一個只讀的布爾值,用以說明這個正則表達式是否帶有修飾符i。 - multiline也是一個只讀的布爾值,用以說明這個正則表達式是否帶有修飾符m。
- lastIndex是一個可讀/寫的整數,如果匹配模式帶有g修飾符,這個屬性存儲在整個字符串下,一次檢索的開始位置。
RegExp方法
- exec()方法
對一個指定的字符串執行一個正則表達式。
即在一個字符串的執行匹配檢索,如果沒有找到任何匹配就返回null,但如果找到了一個匹配,它將返回一個數組。 - test()方法
它的參數是一個字符串。
用test()對某個字符串進行檢索,如果包含正則表達式的一個匹配結果則返回true。
var pattern = /java/i;
pattern.test("javascript"); //返回true
正則符號表.png