正則表達式 -基礎部分

正則表達式

菜鳥教程鏈接
菜鳥工具-正則表達式在線測試
菜鳥工具-前端工具

爲什麼要使用正則表達式?

  • 測試字符串內的模式(數據驗證)
  • 替換文本
  • 基於模式匹配從字符串中提取子字符串

語法概念瞭解

  • 普通字符 - 包括顯示指定爲元字符的所有可打印和不可打印字符。如所有的大小寫字母、所有數字、所有標點符號和其他符號等。
  • 非打印字符 - 也是正則表達式的組成部分。 如:以下字符;
    非打印字符 描述
    \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,注意逗號和兩個數之間不能有空格
    注意1:如果限定符出現在範圍表達式之後,則應用於整個範圍表達式。
    注意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"。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章