Ce face | (operatorul SAU / alternare)
Bara verticală | (pipe / alternation) funcționează ca operatorul logic SAU (OR) în expresiile regulare: motorul încearcă alternativele de la stânga la dreapta și se oprește la prima variantă care reușește să potrivească.
Cel mai important aspect tehnic al operatorului | este că are cea mai mică precedență (prioritate) dintre toți operatorii RegEx! Asta înseamnă că | împarte întreaga expresie (sau întregul grup din care face parte) în două jumătăți complet separate. Din acest motiv, aproape întotdeauna vei dori să izolezi alternarea în interiorul unor paranteze: (var1|var2) sau (?:var1|var2).
Variante și sintaxă asociată
| Expresie / Simbol | Descriere |
|---|---|
A|B|C |
Potrivește fie subexpresia A, fie B, fie C (testate în ordine de la stânga la dreapta). |
(?:A|B) |
Limitează domeniul alternării doar la A și B, fără a crea un grup de captură. |
\.(?:jpg|jpeg|png|webp)$ |
Verifică dacă un nume de fișier are una dintre extensiile de imagine listate. |
^(?:da|nu)$ |
Validează că întregul șir este exact „da” sau exact „nu”. |
Exemple
Exemplul 1: Extragerea extensiilor sau a zilelor săptămânii cu grup și |
Izolăm variantele în (?:...) pentru ca limitele \b să se aplice fiecărei opțiuni.
Expresie: /\b(?:luni|marți|miercuri|joi|vineri)\b/gi
Text: "Ședința de marți s-a mutat vineri dimineață."
Potriviri găsite (Matches)
Match 1: "marți"
Match 2: "vineri"
Exemplul 2: Ordinea variantelor în alternare contează (cea mai lungă prima!)
Motorul RegEx este eager: dacă prima variantă din | este un prefix al celei de-a doua, se va opri la prima.
Expresie greșită: /ron|ronaldo/gi
Expresie corectă: /ronaldo|ron/gi
Text: "Cristiano Ronaldo a plătit 100 RON."
Potriviri găsite (Matches)
Cu /ron|ronaldo/gi -> Match 1: "Ron" (din Ronaldo!), Match 2: "RON"
Cu /ronaldo|ron/gi -> Match 1: "Ronaldo", Match 2: "RON"
Greșeli frecvente
- Uitarea parantezelor când combini
|cu ancorele^și$: expresia/^http|https$/înseamnă „începe cuhttpSAU se termină cuhttps” (acceptând"http_orice_prostie"!). Scrie mereu/^(?:http|https)$/sau/^https?$/. - Folosirea alternării
(a|b|c)pentru caractere individuale în loc de un set[abc]: setul de caractere este mult mai rapid și mai scurt de scris. - Scrierea lui
[da|nu]în paranteze drepte: în interiorul[...], bara verticală|nu este operator SAU, ci caracterul literal|.
Simboluri și rețete înrudite
(?:...) (grup fără captură): Grupează elementele pentru aplicarea cuantificatorilor sau a operatorului |, fără a salva subșirul în lista de capturi.(...) (grup de captură): Grupează mai multe elemente într-o singură unitate și salvează (capturează) subșirul potrivit pentru extragere sau înlocuire.^ și $ (început și sfârșit de șir / linie): Ancorează potrivirea la începutul (^) și/sau la sfârșitul ($) șirului de text sau al fiecărui rând.[abc] și [a-z0-9] (seturi și intervale): Definește o clasă personalizată de caractere din care se potrivește un singur caracter.