javascript regex groups
x|y - /* Matches either "x" or "y". For example, /green|red/ matches "green" in
"green apple" and "red" in "red apple". */
(?<Name>x) - /* Named capturing group: Matches "x" and stores it on the groups
property of the returned matches under the name specified by <Name>. The angle
brackets (< and >) are required for group name. */
(?:x) - /* Non-capturing group: Matches "x" but does not remember the match.
The matched substring cannot be recalled from the resulting array's elements
([1], ..., [n]) or from the predefined RegExp object's properties ($1, ..., $9).
*/