正則表達式
菜鳥教程鏈接
菜鳥工具-正則表達式在線測試
菜鳥工具-前端工具
爲什麼要使用正則表達式?
- 測試字符串內的模式(數據驗證)
- 替換文本
- 基於模式匹配從字符串中提取子字符串
語法概念瞭解
- 普通字符 - 包括顯示指定爲元字符的所有可打印和不可打印字符。如所有的大小寫字母、所有數字、所有標點符號和其他符號等。
- 非打印字符 - 也是正則表達式的組成部分。 如:以下字符;
非打印字符 描述 \f 匹配換頁符 \n 匹配換行符 \r 匹配回車符 \t 匹配製表符 \v 匹配垂直製表符 \s 匹配任何空白符,包括空格、製表符、換頁符等 \S 匹配任何非空白符,等價於[^\f\n\r\t\v] - 特殊字符 - 一些有特殊含義的字符,通常要匹配這些特殊字符本身,需要在前面加斜槓(\)轉義。
特殊字符 描述(如要匹配特殊字符本身,需要在前面加斜槓\轉義) ^ 匹配字符串的開始位置,在方括號中使用時例外,表示不接受該字符集合,如要匹配^字符本身,請使用^ $ 匹配字符串的結尾位置,如要匹配$字符本身,請使用$ () 標記一個表達式的開始和結束位置 * 匹配前面的子表達式零次或多次,等價於限定符{0,} + 匹配前面的子表達式一次或多次,等價於限定符{1,} ? 匹配前面的子表達式零次或一次,等價於限定符{0,1} . 匹配除換行符\n之外的任何單子符 [ 標記一箇中括號表達式的開始 { 標記限定符表達式的開始 | 指明兩項之間的一個選擇 \ 將下一個字符標記爲或特殊字符、或原義子符、或向後引用、或八進制轉義符。 - 限定符 - 用來指定正則表達式的一個給定組件必須要出現多少次才滿足匹配。
限定符 描述 * 匹配前面的子表達式零次或多次,等價於限定符{0,} + 匹配前面的子表達式一次或多次,等價於限定符{1,} ? 匹配前面的子表達式零次或一次,等價於限定符{0,1} {n} n是一個正整數,匹配確定的n次,如匹配"foot"中的兩個o {n,} n是一個正整數,至少匹配n次 {n,m} n和m都是正整數,且n必須小於等於m,注意逗號和兩個數之間不能有空格
注意2:* 和 + 限定符都是貪婪的,因爲它們會儘可能多的匹配文字,只有在它們的後面加上一個 ? 就可以實現非貪婪或最小匹配。 - 定位符 - 描述字符串或單詞的邊界,可以將正則表達式固定到行首或行尾。
定位符 描述 ^ 匹配字符串開始的位置,如果設置了RegExp對象的Multiline屬性,還會與\n或\r之後的位置匹配 $ 匹配字符串結尾的位置,如果設置了RegExp對象的Multiline屬性,還會與\n或\r之後的位置匹配 \b 匹配一個單詞邊界,即字與空格間的位置 \B 匹配非單詞邊界 - 字符集 - 由方括號組成,作用匹配某些特定字符
字符集 描述(例子中x表示要匹配的任意字符) [x] 字符集合,匹配包含的任意一個字符。 [^x] 負值字符集合,匹配未包含的任意字符 [a-z] 字符範圍,匹配指定範圍的字符。如"[a-z]"可以匹配任意小寫字母 [^a-z] 負值字符範圍,匹配任何不在指定範圍的任意字符 - 分組 - 由圓括號組成,把匹配到的字符串分成若干個小組,所有獲取的匹配可以從產生的Matches集合中得到。js中使用$0至$9屬性獲取
分組 描述(例子中x表示要匹配的任意字符) (x) 匹配x並獲取這一匹配 (?:x) 匹配x但不獲取匹配結果。如:"industr(?:y|ies)"就是一個比"industry|industries"更簡略的表達式 (?=x) 正向肯定預查,非獲取匹配。如:“Windows(?=95|98|NT|2000)“能匹配"Windows2000"中的"Windows”,但不能匹配"Windows3.1"中的"Windows” (?!x) 正向否定預查,非獲取匹配。如:“Windows(?!95|98|NT|2000)“能匹配"Windows3.1"中的"Windows”,但不能匹配"Windows2000"中的"Windows” (?<=x) 反向肯定預查,與正向肯定預查類似,只是方向相反。如:"(?<=95|98|NT|2000)Windows"能匹配"2000Windows"中的"Windows",但不能匹配"3.1Windows"中的"Windows"。 (?<!x) 反向否定預查,與正向否定預查類似,只是方向相反。 例如"(?<!95|98|NT|2000)Windows"能匹配"3.1Windows"中的"Windows",但不能匹配"2000Windows"中的"Windows"
運算符的優先級
- 正則表達式從左到右進行計算,並遵循優先級順序,這與算術表達式非常類似。
- 規則如下:
- 相同優先級的從左到右進行運算
- 不同優先級的運算先高後低
- 以下列表從最高到最低說明了各種正則表達式運算符的優先級順序
運算符 描述 \ 轉義符 (),(?: ),(?=),[] 圓括號和方括號 *,+,?,{n},{n,},{n,m} 限定符 ^,$,\任何元字符、任何字符 定位點和序列(即:位置和順序) | 替換符,“或"操作符,字符具有高於替換運算符的優先級。如:“m|food"匹配"m"或"food”。若要匹配"mood"或"food”,請使用括號創建子表達式,從而產生"(m|f)ood"。