Střídání (OR) |

Alternace je termín v regulárním výrazu, který je ve skutečnosti jednoduchým „NEBO“.

V regulárním výrazu je označen znakem svislé čáry | .

Potřebujeme například najít programovací jazyky:HTML, PHP, Java nebo JavaScript.

Odpovídající regulární výraz:html|php|java(script)? .

Příklad použití:

let regexp = /html|php|css|java(script)?/gi;

let str = "First HTML appeared, then CSS, then JavaScript";

alert( str.match(regexp) ); // 'HTML', 'CSS', 'JavaScript'

Podobnou věc jsme již viděli – hranaté závorky. Umožňují výběr mezi více znaky, například gr[ae]y odpovídá gray nebo grey .

Hranaté závorky povolují pouze znaky nebo třídy znaků. Střídání umožňuje jakékoli výrazy. Regulární výraz A|B|C znamená jeden z výrazů A , B nebo C .

Například:

  • gr(a|e)y znamená přesně to samé jako gr[ae]y .
  • gra|ey znamená gra nebo ey .

Chcete-li použít střídání na vybranou část vzoru, můžeme ji uzavřít do závorek:

  • I love HTML|CSS odpovídá I love HTML nebo CSS .
  • I love (HTML|CSS) odpovídá I love HTML nebo I love CSS .

Příklad:regulární výraz pro čas

V předchozích článcích byl úkol vytvořit regulární výraz pro vyhledávání času ve tvaru hh:mm , například 12:00 . Ale jednoduchý \d\d:\d\d je příliš vágní. Přijímá 25:99 jako čas (protože vzoru odpovídá 99 minut, ale tento čas je neplatný).

Jak můžeme vytvořit lepší vzor?

Můžeme použít opatrnější párování. Nejprve hodiny:

  • Pokud je první číslice 0 nebo 1 , pak další číslice může být jakákoli:[01]\d .
  • Jinak, pokud je první číslice 2 , pak další musí být [0-3] .
  • (žádná jiná první číslice není povolena)

Obě varianty můžeme zapsat do regulárního výrazu pomocí alternace:[01]\d|2[0-3] .

Dále musí být minuty od 00 na 59 . V jazyce regulárních výrazů, který lze zapsat jako [0-5]\d :první číslice 0-5 a poté libovolnou číslici.

Pokud slepíme hodiny a minuty dohromady, dostaneme vzor:[01]\d|2[0-3]:[0-5]\d .

Už jsme skoro hotovi, ale je tu problém. Alternativa | nyní je mezi [01]\d a 2[0-3]:[0-5]\d .

To znamená:minuty se přidávají k druhé variantě alternace, zde je jasný obrázek:

[01]\d  |  2[0-3]:[0-5]\d

Tento vzor hledá [01]\d nebo 2[0-3]:[0-5]\d .

Ale to je špatně, alternace by měla být použita pouze v části „hodiny“ regulárního výrazu, aby bylo možné [01]\d NEBO 2[0-3] . Opravme to uzavřením „hodin“ do závorek:([01]\d|2[0-3]):[0-5]\d .

Konečné řešení:

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