Alternace je v regulárnÃch výrazech pojem, který ve skuteÄnosti znamená jednoduÅ¡e âNEBOâ.
V regulárnÃm výrazu je oznaÄován znakem svislé Äáry |.
NapÅÃklad potÅebujeme najÃt názvy programovacÃch jazyků: HTML, PHP, Java nebo JavaScript.
OdpovÃdajÃcà regulárnà výraz: html|php|java(script)?.
PÅÃklad použitÃ:
let rv = /html|php|css|java(script)?/gi;
let ÅetÄzec = "NapÅed se objevil HTML, pak CSS, pak JavaScript";
alert( ÅetÄzec.match(rv) ); // 'HTML', 'CSS', 'JavaScript'
Už jsme vidÄli nÄco podobného â hranaté závorky. Ty nám umožÅujà výbÄr z nÄkolika znaků, napÅÃklad gr[ae]y najde gray nebo grey.
Hranaté závorky umožÅujà jen znaky nebo znakové tÅÃdy. Alternace umožÅuje libovolné výrazy. Regulárnà výraz A|B|C znamená jeden z výrazů A, B nebo C.
PÅÃklad:
gr(a|e)yznamená pÅesnÄ totéž jakogr[ae]y.gra|eyznamenágraneboey.
Abychom aplikovali alternaci na zvolenou Äást vzoru, můžeme ji uzavÅÃt do závorek:
Mám rád HTML|CSSznamenáMám rád HTMLneboCSS.Mám rád (HTML|CSS)znamenáMám rád HTMLneboMám rád CSS.
PÅÃklad: regulárnà výraz pro Äas
V pÅedchozÃch ÄláncÃch jsme mÄli úlohu na vytvoÅenà RV pro hledánà Äasu ve tvaru hh:mm, napÅÃklad 12:00. Jednoduchý výraz \d\d:\d\d je vÅ¡ak pÅÃliÅ¡ neurÄitý. PÅijme jako Äas 25:99 (protože 99 minut odpovÃdá vzoru, ale Äas je neplatný).
Jak můžeme vytvoÅit lepšà vzor?
Můžeme použÃt peÄlivÄjšà porovnávánÃ. NapÅed hodiny:
- Pokud je prvnà ÄÃslice
0nebo1, pak následujÃcà ÄÃslice může být libovolná:[01]\d. - Jinak pokud je prvnà ÄÃslice
2, pak následujÃcà musà být[0-3]. - (žádná jiná prvnà ÄÃslice nenà povolena)
V regulárnÃm výrazu můžeme zapsat obÄ varianty pomocà alternace: [01]\d|2[0-3].
Dále minuty musejà být od 00 do 59. V jazyce regulárnÃch výrazů to můžeme zapsat jako [0-5]\d: prvnà ÄÃslice 0-5 a pak libovolná.
Když spojÃme hodiny a minuty dohromady, zÃskáme vzor: [01]\d|2[0-3]:[0-5]\d.
Jsme témÄÅ hotovi, ale je tu problém. Alternace | se nynà dÄje mezi [01]\d a 2[0-3]:[0-5]\d.
To znamená, že minuty jsou pÅidány jako druhá varianta alternace, zde je to jasnÄ vidÄt:
[01]\d | 2[0-3]:[0-5]\d
Tento vzor hledá [01]\d nebo 2[0-3]:[0-5]\d.
To je vÅ¡ak Å¡patnÄ, alternace by mÄla být použita jen v âhodinovéâ Äásti regulárnÃho výrazu, aby umožÅovala [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 rv = /([01]\d|2[0-3]):[0-5]\d/g;
alert("00:00 10:10 23:59 25:99 1:2".match(rv)); // 00:00,10:10,23:59
KomentáÅe
<code>, pro nÄkolik Åádků je obalte znaÄkou<pre>, pro vÃce než 10 Åádků vložte odkaz na pÃskoviÅ¡tÄ (plnkr, jsbin, codepenâ¦)