正則表達式-理論基礎篇

jopen 9年前發布 | 8K 次閱讀 正則表達式

正則表達式-理論基礎篇

  • 什么是正則表達式?
    可以稱作規則一個描述字符模式的對象,正則表達式中的字母和數字,都是按照字面含義進行匹配的。強大的字符串匹配工具

    </li>

  • 如何建立一個正則表達式?

    </li> </ul>

    1. 使用RegExp()構造函數來創建RegExp對象

      </li>

    2. 特殊的直接量語法來創建,定義為包含在一對斜杠(/)之間的字符

      </li> </ol>

      例:var reg = /s$/;,var reg = new RegExp(s$);
      兩者效果完全相同,用來匹配所有以字母“s”結尾的字符串。

      “文本模式”的正則表達式語法

      1.直接量字符

      非字母的字符匹配,這些字符需要通過反斜線(\)作前綴進行轉義.

      </blockquote>

      </tr> </tbody>

      </tr>

      </tr>

      </tr>

      </tr>

      </tr>

      </tr>

      </tr>

      </tr>

      </tr>

      </tr> </tbody> </table>

      • 具有特殊含義的標點符號:

        </li> </ul>

        ^,$,.,*,+,?,=,!,:,|,\,/,(,),[,],{,}

        想在正則表達式中使用這些字符的直接量進行匹配,則必須使用前綴"\",其他標點符號(比如@和引號)無特殊含義,在正則表達式中按照字面含義進行匹配。

        2.字符類.

        方括號,或,范圍

        將直接量字符單獨放進方括號內就組成了字符類。一個字符類可以匹配它包含的任意字符。字符類可以使用連字符來表示字符范圍。

        </blockquote>

      字 符 匹 配
      字母和數字字符 自身
      \o NUL字符
      \t 制表符
      \n 換行符
      \v 垂直制表符
      \f 換頁符
      \r 回車符
      \xnn 由十六進制數nn指定的拉丁字符,例:\x0A等價于\n
      \uxxxx 由十六進制數xxxx指定的unicode字符,例:\u0009等價于\t
      \cX 控制字符^X,例:\cJ等價于換行符\n

      </tr> </tbody>

      </tr>

      </tr>

      </tr>

      </tr>

      </tr>

      </tr>

      </tr>

      </tr>

      </tr>

      </tr> </tbody> </table>

      • 例:

        • /[a,b,c]/:表示和字母"a","b","c"中的任意一個都匹配

          </li>

        • /[a-z]/:匹配拉丁字母表中的小寫字母

          </li>

        • /[/s/d]/:匹配任意空白符或數字

          </li> </ul> </li> </ul>

          3. 重復

          用以指定字符重復的標記

          </blockquote>

      字 符 含 義
      [...] 方括號內的任意字符
      [^...] 不在方括號內的任意字符
      . 除換行符合其他unicode行終止符之外的任意字符
      \w 任何ASCII符組成的的單詞,等同[a-zA-Z0-9]
      \W 任何不是ASCII符組成的的單詞,等同[^a-zA-Z0-9]
      \s 任何unicode空白字符
      \S 任何非unicode空白符的字符,注意\W與\s不同
      \d 任何ASCII數字等價于[0-9]
      \D 除了ASCII數字之外的任何字符,等價于[^0-9]
      [\b] 退格直接量(特例)

      </tr> </tbody>

      </tr>

      </tr>

      </tr>

      </tr>

      </tr>

      </tr> </tbody> </table>

      • 例:

        • /\d{2,4}/:匹配2-4個數字。

          </li>

        • /\w[3]/d?/:精確匹配三個單詞和一個可選的數字。

          </li>

        • /\s+java\s+/:匹配前后有1個或多個空格的字符串"java"

          </li>

        • /[^(]*/:匹配0個或多個非左括號的字符(這里實際上能與"("匹配)

          </li> </ul> </li>

        • 在使用"*",和"?"時要注意,由于這些字符能匹配0個字符,因此它們允許什么都不匹配,例:

          • /a*/能匹配字符串"bbbb",因其含有0個a。

            </li> </ul> </li>

          • 上表中列出的匹配字符為"貪婪的"匹配,它總是盡可能多地匹配,且允許后續的正則表達式繼續匹配。

            </li>

          • 非貪婪匹配,只需在待匹配的字符后跟隨一個問號即可,"?",+?,*?或{1,5}?。例:

            • /a+/:匹配"aaa"時,三個字符都被匹配,

              </li>

            • /a+?/:匹配"aaa"時,因其盡可能少的匹配,只能匹配第一個a

              </li> </ul> </li> </ul>

              4.選擇-分組和引用

              包括:指定選擇項,自表達式分組,和引用前一子表達式的特殊字符

              </blockquote>

              • 選擇項的嘗試匹配次序是從左到右,直到發現匹配項,若左邊成功匹配就忽略右邊的項。

                </li>

              • 正則表達式中圓括號的作用:

                1. 把單獨的項組成子表達式,以便于可以像處理獨立單元一樣,用\|,*,+或者?等等來對單元內的項進行處理

                  </li>

                2. 在完整的模式中定義子模式

                  </li>

                3. 允許在同一正則表達式的后部,引用前面的子表達式

                  </li> </ol> </li> </ul>

      字 符 含 義
      {n,m} 匹配前一項至少n次,但不能超過m次
      {n,} 匹配前一項n次或者更多次
      {n} 匹配前一項n次
      ? 匹配前一項0次或者1次(也就是前一項是可選的,等價于{0,1})
      + 匹配前一項1次或者多次(等價于{1,})
      * 匹配前一項0次或者多次,等價于{0,}

      </tr> </tbody>

      </tr>

      </tr>

      </tr>

      </tr> </tbody> </table>

      • 例:

        • /ab|cd|ef/:可以匹配"ab",也可以匹配"cd",還可以匹配"ef".

          </li>

        • /\d{3}|[a-z]{4}/:可以匹配3個數字,或者4個小寫字母.

          </li>

        • (/[a-z]+(\d+)/):匹配一個或多個小寫字母后跟隨了一位或多位數字,使用括號包裹后,可以從檢索到的匹配中抽取數字了.

          </li> </ul> </li> </ul>

          5.指定匹配位置

          我們稱這些元素為正則表達式的錨,它們將模式定位在搜索字符串的特定位置上.

          </blockquote>

      字 符 含 義
      `"|" (這里是豎線)選擇,匹配的是該符號左邊的子表達式或右邊的子表達式
      (...) 組合,將幾個項組合成為一個單元,這個單元可通過`\ ,*,+或者?`等符號,加以修飾,而且可以記住和這個相匹配的字符串以供以后的引用使用
      (?:..) 只組合,把項組合到一個單元,但不記憶與該組相匹配的字符
      \n 和第n個分組第一次匹配的字符相匹配,組是圓括號中的子表達式(也有可能嵌套的),組索引是從左到右的左括號數,"(?:形式的分組不編碼"

      </tr> </tbody>

      </tr>

      </tr>

      </tr>

      </tr> </tbody> </table>

      • 例:

        • /^JavaScript$/:匹配"JavaScript"單詞

          </li>

        • /\B[Ss]cript/:與"JavaScript"和"/postscript"匹配,但不與"script"與"Script".

          </li> </ul> </li> </ul>

          6.修飾符

          說明高級匹配的規則,放在"/"符號之外,第二條斜線后

          </blockquote>

      字 符 含 義
      ^ 匹配字符串的開頭,在多行檢索中,匹配一行的開頭
      $ 匹配字符串的結尾,在多行檢索中,匹配一行的結尾
      \b 匹配一個單詞邊界,簡言之,就是位于字符\w和\W之間的位置,或位于字符\w和字符串的開頭或結尾之間的位置(需要注意:[\b]匹配的是退格符)
      \B 匹配非單詞邊界的位置

      </tr> </tbody>

      </tr>

      </tr>

      </tr> </tbody> </table>

      字 符 含 義
      i 執行不區分大小寫的匹配
      g 執行一個全局匹配,簡言之,就是要找到所有的匹配,而不是在找到一個之后就停止
      m 多行匹配模式,^匹配一行的開頭和字符串的開頭,$匹配行的結束和字符串的結束

      </tr> </tbody>

      </tr>

      </tr>

      </tr>

      </tr>

      </tr> </tbody> </table>
      來自:
      http://segmentfault.com/a/1190000003977848

       本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
       轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
       本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!
      屬性名 類型 含義
      source 只讀字符串 包含正則表達式的文本
      global 只讀布爾值 用以說明正則表達式是否帶有修飾g
      ignoreCase 只讀布爾值 用以說明正則表達式是否帶有修飾i
      multiline 只讀布爾值 用以說明正則表達式是否帶有修飾m
      lastIndex 可讀性的整數 若匹配模式中含有g,這個屬性儲存在整個字符串中下一次檢索的開始位置
sesese色