Expert Refresh

Alternation

1) Which regex matches gray or grey?




2) How can regex (First|1st) be shortened?







Metacharacter
Metacharacter "|" means "or". For example /Bob/ and /Robert/ are separate expressions, but /Bob|Robert/ is one regex that matches either.
Character class vs alternation
Looking at the /gr[ea]y/ example, it can be written /grey|gray/, and even /gr(a|e)y/. The latter case uses parantheses to constrain the alternation. Note that something like /gr[a|e]y/ is not what we want. Within a class, the "|" is just a normal character, like a and e.
Parantheses
With /gr(a|e)y/ parantheses are required because without them, /gra|ey/ means "gra" or "ey"
Another example
Another example is (First|1st) [Ss]treet. Since both "First" and "1st" end with "st", the combination can be shortened to /(Fir|1)st/
Careful
Although the /gr[ea]y/ match the same as /gr(a|e)y/ be careful not to confuse the concept of alternation with taht of a character class. A character class can match just a single character in the target text. With alternation, since each alternative can be a full-fledged regex, each alternative can match an arbitrary amount of text.
Mini-language
Character classes are almost like their own special mini-language (with their own ideas about metacharacters). Alternation is part of the "main" regex language.
Precedence
Alternation has very low precedence, so this and|or that matches the same as (this and)|(or that), and not this (and|or) that, even through visually, the and|or looks like a unit.


References