共用方式為


JScript 中的數量詞

如果您無法指定組成比對的字元數量,規則運算式會支援限定詞的概念。 這些限定詞讓您指定特定規則運算式元件必須出現的次數,才能使比對結果為 True。

數量詞的定義

字元

說明

*

比對前置字元或子運算式零次或多次。 例如,zo* 比對 z 和 zoo。 * 等於 {0,}。

+

比對前置字元或子運算式一次或多次。 例如,zo+ 會比對 zo 和 zoo,但不比對 z。 + 等於 {1,}。

?

比對前置字元或子運算式零次或多次。 例如,do(es)? 會比對 do 或 does 中的 do。 ? 等於 {0,1}

{n}

n 是非負數的整數。 正好比對 n 次。 例如,o{2} 不比對 Bob 中的 o,而是比對 food 中的兩個 o。

{n,}

n 是非負數的整數。 至少比對 n 次。 例如,o{2,} 不比對 Bob 中的 o,而是比對 foooood 中所有的 o。 o{1,} 等於 o+。 o{0,} 等於 o*。

{n,m}

mn 都是非負值的整數,其中 n <= m。 至少比對 n 次而且至多比對 m 次。 例如,o{1,3} 會比對 fooooood 中的前三個 o。 o{0,1} 等於 o?。 請注意,您不可在逗號與數字之間置入空格。

由於大型輸入文件中的所有章節數很容易超過九,所以您需要一種可以處理二位數或三位數之章節數的方式。 限定詞可提供這個功能。 下列規則運算式比對含有任何位數的章節標題:

/Chapter [1-9][0-9]*/

請注意,限定詞出現在範圍運算式之後。 所以,這時候,它適用於只指定 0 到 9 數字 (含) 的範圍運算式。

因為在第二或後續位置不一定是數字,所以此處不使用 + 限定詞。 ? 字元將章節數限定於只有兩位數,所以也不使用 ? 字元。 您想要比對接在 Chapter 及空格字元之後的數字,且這個數字至少一定要一個。

如果總共只有 99 個章節,則可以使用下列運算式來指定至少一位數但不超過兩位數的章節。

/Chapter [0-9]{1,2}/

前面運算式的缺點為,大於 99 的章節號碼仍然符合前兩位位數。 另一個缺點為 Chapter 0 會相符。 下列列出只比對兩位數的最佳運算式:

/Chapter [1-9][0-9]?/

/Chapter [1-9][0-9]{0,1}/

*、+ 和 ? 限定詞會盡可能比對大量文字,所以都稱為窮盡。 然而,有時候您只要最小比對。

例如,您可能搜尋 HTML 文件,以尋找封入在 H1 標記中的章節標題項目。 文件中出現的文字如下所示:

<H1>Chapter 1: Introduction to Regular Expressions</H1>

下列運算式比對從封入 H1 標記的開頭小於符號 (<) 到大於符號 (>) 的任何項目。

/<.*>/

如果您只要比對開頭的 H1 標記,下列 Non-Greedy 運算式只比對 <H1>。

/<.*?>/

將 ? 置於 *、+ 或 ? 限定詞之後,就可將運算式從窮盡轉換成非窮盡 (或最小) 比對。

請參閱

其他資源

規則運算式簡介