JavaScript 核心參考教程 RegExp對象

來源:互聯網
上載者:User

  1. Regex的直接量字元
    字元 匹配
    字母數字字元 本身
    \o NUL字元(\u0000)
    \t 制位表(\u0009)
    \n 分行符號(\u000A)
    \v 垂直制位表(\u000B)
    \f 換頁符(\u000C)
    \r 斷行符號(\u000D)
    \xnn 由十六進位數nn指定的拉丁字元,例如\u0A等價於\n
    \uxxxx 由十六進位數xxxx指定的Unicode字元,例如\u0009等價於\t
    \cX 控制字元X,例如,\cJ等價於\n
  2. Regex的字元類
    字元 匹配
    [...] 位於括弧內的任一字元
    [^...] 不在括弧之中的任一字元
    . 除分行符號和其他Unicode行中止符之外的任一字元
    \w 任何ASCII單字字元,等價於[a-zA-Z0-9_]
    \W 任何ASCII非單字字元,等價於[^a-zA-Z0-9_]
    \s 任何Unicode空白符[\f\n\r\t\v]
    \S 任何Unicode非空白符,注意\w和\S的不同[^\f\n\r\t\v]
    \d 任何ASCII數字,等價於[0-9]
    \D 除了ASCII數字之外的任何字元,等價於[^0-9]
    [\b] 退格直接量(特例)
  3. Regex的重複字元
    字元 含義
    {n,m} 匹配前一項至少n次,但不能超過m次
    {n,} 匹配前一項n次,或更多次
    {n} 匹配前一項恰好n次
    ? 匹配前一項0次或1次,也就是說這一項是可選的。等價於{0,1}
    + 匹配前一項1次或多次。等價於{1,}
    * 匹配前一項0次或多次。等價於{0,}
    在Regex中,括弧具有幾種作用。一個作用是把單獨的公事包成子運算式,以便可以象處理一個
    獨立的單元那樣用|、*、+或?等來處理它們。括弧的另一個作用是在完整的模式中定義子模式。當一
    個Regex成功地和目標字串相匹配時,可以從目標串中抽出和括弧中的子模式相匹配的部分。
  4. Regex的選擇、分組和引用字元
    字元 含義
    | 選擇。匹配的是該符號的左邊的子運算式或右邊的子運算式
    (...) 組合。將幾個公事包為一個單元,這個單元可由|、*、+或?等符號使用,
    而且還可以記住和這個組合匹配的字元,以供此後的引用使用
    (?:...) 只組合。把公事包到一個單元,但是不記憶與該組匹配的字元
    \n 和第n個分組第一次匹配的字元相匹配,組是括弧中的子運算式(可能是嵌套
    的)。組號是從左至右計數的左括弧數,以(?:形式分組的組不編碼。
  5. Regex的錨元素
    字元 含義
    ^ 匹配字串的開頭,在多行檢索中,匹配一行的開頭
    $ 匹配字串的結尾,在多行檢索中,匹配一行的結尾
    \b 匹配一個詞語的邊界。簡而言之,就是位於字元\w和\W之間的位置,或位於字元\w
    和字串的開頭和結尾的位置(但注意:[\b]匹配的是退格符)
    \B 匹配非詞語邊界的字元
    (?=p) 正前向聲明,要求接下來的字元都與模式p匹配,但是不包括匹配中的那些字元
    (?!p) 反向前聲明,要求接下來的字元不與模式P匹配
  6. Regex的標誌
    字元 含義
    i 執行大小寫不敏感匹配
    g 執行一個全域匹配,簡而言之,即找到所有匹配,而不是找到第一個之後就停止
    m 多行模式,^匹配一行的開頭和字串的開頭,$匹配一行的結尾和字串的結尾

JS中的RegExp對象

  1. 建構函式:

    顯式建構函式,文法為:new RegExp("pattern"[,"flags"])。
    隱式建構函式,文法為: /pattern/[flags]。

  2. 靜態屬性

    index 是當前運算式模式最初相符內容的開始位置,從0開始計數。其初始值為-1,每次成功匹配時,index屬性都會隨之改變。
    input 返回當前所作用的字串,可以簡寫為$_,初始值為空白字串""。
    lastIndex 是當前運算式模式最初相符內容中最後一個字元的下一個位置,從0開始計數,常被作為繼續搜尋時的起始位置,初始值為-1,表示從起始位置開始搜尋,每次成功匹配時,lastIndex屬性值都會隨之改變。
    lastMatch 是當前運算式模式的最後一個匹配字串,可以簡寫為$&。其初始值為空白字串""。在每次成功匹配時,lastMatch屬性值都會隨之改變。
    lastParen 如果運算式模式中有括起來的子匹配,是當前運算式模式中最後的子匹配所匹配到的子字串,可以簡寫為$+。其初始值為空白字串""。每次成功匹配時,lastParen屬性值都會隨之改變。
    leftContext 是當前運算式模式最後一個匹配字串左邊的所有內容,可以簡寫為$`(其中“'”為鍵盤上“Esc”下邊的反單引號)。初始值為空白字串""。每次成功匹配時,其屬性值都會隨之改變。
    $1…$9 這些屬性是唯讀。如果運算式模式中有括起來的子匹配,$1…$9屬性值分別是第1個到第9個子匹配所捕獲到的內容。如果有超過9個以上的子匹配,$1…$9屬性分別對應最後的9個子匹配。在一個運算式模式中,可以指定任意多個帶括弧的子匹配,但RegExp對象只能儲存最後的9個子匹配的結果。在RegExp執行個體對象的一些方法所返回的結果數組中,可以獲得所有圓括弧內的子匹配結果。
  3. 執行個體屬性

    global 返回建立RegExp對象執行個體時指定的global標誌(g)的狀態。如果建立RegExp對象執行個體時設定了g標誌,該屬性返回True,否則返回False,預設值為False。
    ignoreCase 返回建立RegExp對象執行個體時指定的ignoreCase標誌(i)的狀態。如果建立RegExp對象執行個體時設定了i標誌,該屬性返回True,否則返回False,預設值為False。
    multiLine 返回建立RegExp對象執行個體時指定的multiLine標誌(m)的狀態。如果建立RegExp對象執行個體時設定了m標誌,該屬性返回True,否則返回False,預設值為False。
    source 返回建立RegExp對象執行個體時指定的運算式文本字串。
  4. 執行個體方法

    exec 文法格式為exec(str)。該方法使用建立RegExp對象執行個體時所指定的運算式模式對一個字串進行搜尋,並返回一個包含搜尋結果的數組。
    如果為Regex設定了全域標誌(g),可以通過多次調用exec和test方法在字串中進行連續搜尋,每次都是從RegExp對象的lastIndex屬性值指定的位置開始搜尋字串。
    如果沒有設定全域標誌(g),則exec和test方法忽略RegExp對象的lastIndex屬性值,從字串的起始位置開始搜尋。如果exec方法沒有找到匹配,傳回值為null;如果找到匹配,則返回一個數組,並更新RegExp對象中有關靜態屬性以反映匹配情況。返回數組中的元素0包含了完整的匹配結果,而元素1~n依次是運算式模式中定義的各個子匹配的結果。
    test 文法格式為test(str)。該方法檢查一個字串中是否存在建立RegExp對象執行個體時所指定的運算式模式,如果存在就返回True,否則返回False。 如果找到匹配項,則會更新RegExp對象中的有關靜態屬性,以反映匹配情況。
    compile 文法格式為compile("pattern"[,"flags"])。該方法可以更換RegExp對象執行個體所使用的運算式模式,並將新的運算式模式編譯為內部格式,從而使以後的匹配過程執行更快。
  5. RegExp說明

    預設情況下,Regex使用最長(也叫貪婪)匹配原則.當?緊隨其它限定符(*、+、?、{n}、{n,}、{n,m})之後時,匹配模式變成使用最短(也叫非貪婪)匹配原則.

    分組組合符就是將Regex中的某一部分內容組合起來的符號,反向引用符則是用於匹配前面的分組組合所捕獲到的內容標識符號
    (1) (pattern)將圓括弧中的pattern部分組合成一個可統一操作的組合項和子匹配,每個捕獲
    的子匹配項按照它們在Regex模式中從左至右出現的順序儲存在緩衝區中.緩衝區從1開始編號,最多可儲存99個子匹配捕獲的內容.儲存在緩衝區中的子匹配捕獲的內容,可以在程式設計語言中被檢索,也可以在Regex中被反向引用.若要匹配字面意義的括弧字元"("和")",在Regex中要分別使用"\(" 和"\)".
    (2) \num匹配編號為num的緩衝區所儲存的內容,此處的num是一個標識特定緩衝區的一位或兩位十進位正整數,這種方式稱為子匹配的反向引用.反向引用最有用的應用之一就是能提供表示相同匹配項的能力,例如,要匹配連續的5個數字字元,可以使用\d{5}作為Regex文本,它可以匹配12345,但是, 要匹配連續的5個相同的數字字元,如55555、11111等,需要使用(\d)\1{4}作為Regex文本,\1表示與前面(\d)所捕獲的內容一樣,\1{4}則表示前面的(\d)所捕獲的內容還連續出現4次.又例如,要匹配"Is is the cost of of gasoline going up up?"中所有連續重複的單詞部分,可以使用/\b([a-z]+)\1\b/gi作為Regex文本.
    (3) (?:pattern) 將圓括弧中的pattern部分組合成一個可統一操作的組合項,但不把這部分內容當作子匹配捕獲,即pattern部分是一個非捕獲匹配,它匹配的內容不儲存在緩衝區中供以後使用.這對必須進行組合、但又不想讓組合的部分具有子匹配特點的情況很有用.
    (4) (?=pattern)稱為正向"預測先行"匹配,在被搜尋字串的相應位置必須有pattern部分匹配的內容,但這部分匹配的內容不作為匹配結果處理,更不會被儲存在擷取緩衝區中供以後使用.(?=pattern)必須位於一個Regex模式的最前或最後面.
    (5) (?!pattern)稱為反向"預測先行"匹配,在被搜尋的字串的相應位置不能有pattern部分匹配的內容,除此之外,功能與正向"預測先行"匹配一樣.

執行個體示範
* 簡單樣本
[Ctrl+A 全選 注:如需引入外部Js需重新整理才能執行]

# 注意事項
(?<=exp)零寬度正回顧後發斷言(不支援)
(?<!exp)零寬度負回顧後發斷言(不支援)
# 參考資料
Regex30分鐘入門教程 http://www.jb51.net/tools/zhengze.html

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.