數量詞

Flash Player 9 以及更新的版本,Adobe AIR 1.0 以及更新的版本

使用數量詞來指定字元或序列在模式中的重複情形,如下所示:

數量詞中繼字元

說明

* (星號)

比對之前重複零次或多次的項目。

+ (加號)

比對之前重複一或多次的項目。

? (問號)

比對之前重複零次或一次的項目。

{n}

{n,}

{n,n}

指定前述項目的數值數量詞或數量詞範圍:

/A{27}/ 比對字元 A 重複 27 次。

/A{3,}/ 比對字元 A 重複 3 次或 3 次以上。

/A{3,5}/ 比對字元 A 重複 3 到 5 次。

您可以將數量詞套用至單一字元、字元類別或群組上:

  • /a+/ 比對字元 a 重複一次或一次以上。

  • /\d+/ 比對一個或多個數字。

  • /[abc]+/ 比對一個或多個字元的重複,這些字元是 abc

  • /(very, )*/ 比對文字 very,後面跟著逗號以及重複零次或多次的空格。

您可以在已經套用數量詞的括號群組之中使用數量詞。例如,下列數量詞會比對 wordword-word-word 等字串:

/\w+(-\w+)*/

根據預設,規則運算式所執行的比對,稱為「貪婪比對」。規則運算式中的任何子模式 (例如 .*) 都會在移動至規則運算式下個部分之前,儘可能比對字串中的字元。例如,以下列規則運算式和字串為例:

var pattern:RegExp = /<p>.*<\/p>/; 
str:String = "<p>Paragraph 1</p> <p>Paragraph 2</p>";

規則運算式比對整個字串:

<p>Paragraph 1</p> <p>Paragraph 2</p>

但是,假設您只要比對一個 <p>...</p> 群組。您可以藉由下列方式執行這項作業:

<p>Paragraph 1</p>

在任何數量詞後面加上問號 (?),將它變更為所謂的「緩式數量詞」。例如,下列使用緩式 *? 數量詞的規則運算式,會比對 <p> 後面接著最少可能的字元數 (緩式),再接著 </p>

/<p>.*?<\/p>/

請記住下列與數量詞有關的幾個重點:

  • 數量詞 {0}{0,0} 不會從相符項目中排除項目。

  • 請不要結合使用多個數量詞,如 /abc+*/ 所示。

  • 點 (.) 不會合併行,除非設定 s (dotall) 旗標,即使它後面跟著 * 數量詞,也不會合併。例如,以下列程式碼為例:

    var str:String = "<p>Test\n"; 
    str += "Multiline</p>"; 
    var re:RegExp = /<p>.*<\/p>/; 
    trace(str.match(re)); // null; 
     
    re = /<p>.*<\/p>/s; 
    trace(str.match(re)); 
        // output: <p>Test 
        //                    Multiline</p>

如需詳細資訊,請參閱旗標和屬性