<menu id="a2esi"><strong id="a2esi"></strong></menu>
  • <nav id="a2esi"></nav>
    學校總部  | 設為首頁 | 加入收藏 | 官方微信
    內威培訓
    打造“培訓+就業”一站式服務品牌!
    banner1
    • Python+AI工程師
    • Web前端工程師
    • Java軟件開發工程師

    首頁>>學員天地

    正則表達式使用詳解(全面)
    編輯:Simon  閱讀:3928次  發布:12-09-25

    前言:正規表達式是網站前端開發的一個很重要的技術,本文整編了網上摘下的一些文章,對正規表達式的語法和應用作了一個全面的講解,以使大家參考!

    一、簡介
     簡單的說,正則表達式是一種可以用于模式匹配和替換的強有力的工具。其作用如下:
     1、測試字符串的某個模式。例如,可以對一個輸入字符串進行測試,看在該字符串是否存在一個電話號碼模式或一個信用卡號碼模式。這稱為數據有效性驗證。
     2、替換文本。可以在文檔中使用一個正則表達式來標識特定文字,然后可以全部將其刪除,或者替換為別的文字。
     3、根據模式匹配從字符串中提取一個子字符串。可以用來在文本或輸入字段中查找特定文字。

    二、基本語法
    1、正則表達式的形式
       一般為:/love/[flags]
       其中位于“/”定界符之間的部分就是將要在目標對象中進行匹配的模式。用戶只要把希望查找匹配對象的模式內容放入“/”定界符之間即可。

    2、元字符
       為了能夠使用戶更加靈活的定制模式內容,正則表達式提供了專門的“元字符”。所謂元字符就是指那些在正則表達式中具有特殊意義的專用字符,可以用來規定其前導字符(即位于元字符前面的字符)在目標對象中的出現模式。較為常用的元字符有:
      “+”:規定其前導字符必須在目標對象中連續出現一次或多次。
      “*”:規定其前導字符必須在目標對象中出現零次或連續多次。
      “?”:規定其前導對象必須在目標對象中連續出現零次或一次。
     示例如下:
       /fo+/ :因為表達式中包含“+”元字符,表示可以與目標對象中的 “fool”, “fo”, 或者 “football”等在字母f后面連續出現一個或多個字母o的字符串相匹配。
       /eg*/ :因為表達式中包含“*”元字符,表示可以與目標對象中的 “easy”, “ego”, 或者 “egg”等在字母e后面連續出現零個或多個字母g的字符串相匹配。
       /Wil?/ :因為表達式中包含“?”元字符,表示可以與目標對象中的 “Win”, 或者“Wilson”,等在字母i后面連續出現零個或一個字母l的字符串相匹配。

    3、次數限定詞
      正則表達式支持次數限定符的概念,這些限定符可以指定正則表達式的一個給定組件必須要出現多少次才能滿足匹配。
      {n}:匹配確定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的兩個o。
     {n,}:至少匹配 n 次。例如,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o{1,}' 等價于 'o+'。'o{0,}' 則等價于 'o*'。
     {n,m}:m 和 n 均為非負整數,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,"o{1,3}" 將匹配 "fooooood" 中的前三個 o。'o{0,1}' 等價于 'o?'。請注意在逗號和兩個數之間不能有空格。

    4、其它重要元字符
     在對如何使用正則表達式有了初步了解之后,我們來看一下其它幾個重要的元字符的使用方式。
     \s:用于匹配單個空格符,包括tab鍵和換行符;
     \S:用于匹配除單個空格符之外的所有字符;與\s互為逆運算。
     \d:用于匹配從0到9的數字;
     \w:用于匹配字母,數字或下劃線字符;
     \W:用于匹配所有與\w不匹配的字符;與\w互為逆運算。
     . :用于匹配除換行符之外的所有字符。
     示例如下:
       /\s+/   :上述正則表達式可以用于匹配目標對象中的一個或多個空格字符。
       /\d000/ :如果我們手中有一份復雜的財務報表,那么我們可以通過這個正則表達式查找到所有總額達千元的款項。

    5、定位符
     除了我們以上所介紹的元字符之外,正則表達式中還具有另外一種較為獨特的專用字符,即定位符。定位符用于規定匹配模式在目標對象中的出現位置。 較為常用的定位符包括:
     “^”:規定匹配模式必須出現在目標字符串的開頭
     “$”:規定匹配模式必須出現在目標對象的結尾,與“^”互為逆運算。
     “\b”:規定匹配模式必須出現在目標字符串的開頭或結尾的兩個邊界之一
     “\B”:規定匹配對象必須位于目標字符串的開頭和結尾兩個邊界之內,即匹配對象既不能作為目標字符串的開頭,也不能作為目標字符串的結尾。與“\b ”互為逆運算。
      示例如下:
         /^hell/  :可以與目標對象中以 “hell”, “hello”或“hellhound”開頭的字符串相匹配。
         /ar$/  :可以與目標對象中以 “car”, “bar”或 “ar” 結尾的字符串相匹配。
         /\bbom/ :因為正則表達式模式以“\b”定位符開頭,所以可以與目標對象中以 “bomb”, 或 “bom”開頭的字符串相匹配。
         /man\b/  :因為正則表達式模式以“\b”定位符結尾,所以可以與目標對象中以 “human”, “woman”或 “man”結尾的字符串相匹配。

    6、其它重要限定符
       1)范圍限定符“[ ]”:為了能夠方便用戶更加靈活的設定匹配模式,正則表達式允許使用者在匹配模式中指定某一個范圍而不局限于具體的字符。例如:
       /[A-Z]/ 表達式將會與從A到Z范圍內任何一個大寫字母相匹配。
       /[a-z]/ 表達式將會與從a到z范圍內任何一個小寫字母相匹配。
       /[0-9]/  達式將會與從0到9范圍內任何一個數字相匹配。
       /([a-z][A-Z][0-9])+/ 表達式將會與任何由字母和數字組成的字符串,如 “aB0” 等相匹配。
       2)組合限定符“()”:用于把字符串組合在一起,“()”符號包含的內容必須同時出現在目標對象中。
       3)管道符 “|”:如果我們希望在正則表達式中實現類似編程邏輯中的“或”運算,在多個不同的模式中任選一個進行匹配的話,可以使用管道符 “|”。例如:/to|too|2/ 上述正則表達式將會與目標對象中的 “to”, “too”, 或 “2” 相匹配。
       4)否定符 “[^]”:正則表達式中還有一個較為常用的運算符,即否定符 “[^]”。與前文所介紹的定位符“^”不同,否定符 “[^]”規定目標對象中不能存在模式中所規定的字符串。例如:/[^A-C]/上述字符串將會與目標對象中除A,B,和C之外的任何字符相匹配。一般來說,當“^”出現在 “[]”內時就被視做否定運算符;而當“^”位于“[]”之外,或沒有“[]”時,則應當被視做定位符。
       5)轉義符“\”:當用戶需要在正則表達式的模式中加入元字符,并查找其匹配對象時,可以使用轉義符“\”。例如:/Th\*/上述正則表達式將會與目標對象中的“Th*”而非“The”等相匹配。

    7、flags
      為可選項,標志模式匹配時的查詢方式,標志符可以組合使用,可用標志符有:
     g: 全文查找出現的所有pattern
     i :忽略大小寫
     m:多行查找

    三、優先級
       在構造正則表達式之后,就可以象數學表達式一樣來求值,也就是說,可以從左至右并按照一個優先級順序來求值。優先級如下:
     1.\ 轉義符
     2.(), (?:), (?=), [] 圓括號和方括號
     3.*, +, ?, {n}, {n,}, {n,m} 限定符
     4.^, $, \anymetacharacter 位置和順序
     5.|“或”操作
       實例:
       例1 測試電話號碼合法性
           var regPhone=/^0\d{2,3}\-\d{7,8}$/;
           alert(regPhone.test("021-123478"));

       例2 測試e-mail合法性
           var regPhone=/^(\w+\.?)*\w+@\w+\.\w+$/;
           alert("email"+regPhone.test(abc.xyz@snetway.com));

      例3 使用字串“**”替代字串“iaxbloayBveA3bu!”所有以a開頭b結束且只有三個字符的子串,忽略大小寫。
         var reg=/a\wb/gi;
         var s="iaxbloayBveA3bu!";
         alert(s.replace(reg,""));
    (本題如用空串來替代結果如何?)

    四、正則表達式對象
      本對象包含正則表達式模式以及表明如何應用模式的標志。
    1、語法
      語法 1 re = /pattern/[flags]
      語法 2 re = new RegExp("pattern",["flags"])
    2、參數
      re:必選項。將要賦值為正則表達式模式的變量名。
        pattern:必選項。要使用的正則表達式模式。如果使用語法 1,用 "/" 字符分隔模式。如果用語法 2,用引號將模式引起來。
       flags:可選項,意義同前。
    3、應用示例
     function MatchDemo()
     {
      var r, re; // 聲明變量。
      var s = "The rain in Spain falls mainly in the plain";
      re = new RegExp("ain","g"); // 創建正則表達式對象。
      r = s.match(re); // 在字符串 s 中查找匹配。
      return(r);
     }

    五、常見用法
    正則表達式用于字符串處理、表單驗證等場合,實用高效。現將一些常用的表達式收集于此,以備不時之需。
    1、匹配常用數據
      1)中文字符: [\u4e00-\u9fa5]
      2)雙字節字符(包括漢字在內):[^\x00-\xff]
      3)HTML標記:<(\S*?)[^>]*>.*?</\1>|<.*? />
      4)首尾空白字符的正則表達式:^\s*|\s*$
      5)Email地址的正則表達式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
      6)網址URL的正則表達式:[a-zA-z]+://[^\s]*
      7)國內電話號碼:\d{3}-\d{8}|\d{4}-\d{7}
         評注:匹配形式如 0511-4405222 或 021-87888822
      8)騰訊QQ號:[1-9][0-9]{4,}(騰訊QQ號從10000開始)
      9)中國郵政編碼:[1-9]\d{5}(?!\d)
      10)身份證:\d{15}|\d{18}
      11)ip地址:\d+\.\d+\.\d+\.\d+
    2、匹配特定數值
      1)非負整數:^[1-9]\d*|0$
      2)正浮點數:^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$ 
      3)浮點數:^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$



    上一篇: 當下10大最熱門的網站開發技術   下一篇: 解決span float:right不能右對齊而是換行顯示
    返回列表
    網絡大專、自考本科,學歷輕松拿!
    ©2016-2020 上海內威職業技能培訓學校 版權所有
    普陀區武寧路1500號中樓2-3層(郵編:200062)
    咨詢:021-62434966  合作:021-13371929650  就業:021-62434966  傳真:  電郵:service@snetway.com
    《中華人民共和國電信與信息服務業務》經營許可證滬ICP備15002602號 
    <menu id="a2esi"><strong id="a2esi"></strong></menu>
  • <nav id="a2esi"></nav>
    本溪娱网棋牌