正規表示法中交替這個術語實際上是一個簡單的「OR」。
在正規表示法中,它以垂直線字元 |
表示。
例如,我們需要尋找程式語言:HTML、PHP、Java 或 JavaScript。
對應的正規表示法:html|php|java(script)?
。
使用範例
let regexp = /html|php|css|java(script)?/gi;
let str = "First HTML appeared, then CSS, then JavaScript";
alert( str.match(regexp) ); // 'HTML', 'CSS', 'JavaScript'
我們已經看過類似的東西 - 方括號。它們允許在多個字元之間進行選擇,例如 gr[ae]y
符合 gray
或 grey
。
方括號只允許字元或字元類別。交替允許任何表示法。正規表示法 A|B|C
表示表示法 A
、B
或 C
之一。
例如
gr(a|e)y
的意思與gr[ae]y
完全相同。gra|ey
表示gra
或ey
。
若要將交替套用至樣式的特定部分,我們可以將其括在括號中
I love HTML|CSS
符合I love HTML
或CSS
。I love (HTML|CSS)
符合I love HTML
或I love CSS
。
範例:時間正規表示法
在先前的文章中,有一個任務是要建立一個正規表示法,用於搜尋時間格式為 hh:mm
,例如 12:00
。但是,單純的 \d\d:\d\d
太過模糊。它會將 25:99
視為時間(因為 99 分鐘符合樣式,但該時間無效)。
我們如何建立一個更好的樣式?
我們可以使用更仔細的比對。首先,時
- 如果第一個數字是
0
或1
,則下一個數字可以是任何數字:[01]\d
。 - 否則,如果第一個數字是
2
,則下一個數字必須是[0-3]
。 - (不允許其他第一個數字)
我們可以使用交替在正規表示法中寫入兩個變數:[01]\d|2[0-3]
。
接下來,分鐘必須介於 00
至 59
。在正規表示法語言中,這可以寫成 [0-5]\d
:第一個數字為 0-5
,然後是任何數字。
如果我們將時和分黏貼在一起,我們會得到樣式:[01]\d|2[0-3]:[0-5]\d
。
我們幾乎完成了,但有一個問題。交替 |
現在發生在 [01]\d
和 2[0-3]:[0-5]\d
之間。
也就是說:分鐘會新增到第二個交替變數,以下是一個清楚的範例
[01]\d | 2[0-3]:[0-5]\d
該樣式尋找 [01]\d
或 2[0-3]:[0-5]\d
。
但這是不對的,交替應該只用於正規表示法的「時」部分,以允許 [01]\d
或 2[0-3]
。讓我們透過將「時」括在括號中來修正它:([01]\d|2[0-3]):[0-5]\d
。
最終解決方案
let regexp = /([01]\d|2[0-3]):[0-5]\d/g;
alert("00:00 10:10 23:59 25:99 1:2".match(regexp)); // 00:00,10:10,23:59
留言
<code>
標籤,對於多行,請將它們包覆在<pre>
標籤中,對於超過 10 行的內容,請使用沙盒 (plnkr、jsbin、codepen…)