Skip to content
You are viewing the next version of this website. See current version

Alternation

An alternation matches one of several alternatives.

let Alternation = ('|'? Alternatives)?;
let Alternatives = Intersection ('|' Intersection)*;

See Intersection.

Note that an alternation may have a leading pipe. Also note that an alternative may not be empty, i.e. | | is not allowed. Use an empty string instead, e.g. 'foo' | '' | 'bar'.

| 'hello'
| 'pomsky'+

Alternation is supported in all flavors.

Alternatives are matched consecutively. The first alternative that matches is used.

Compiled to an alternation. The example above would be compiled to hello|(?:pomsky)+.

Alternations are subject to advanced optimizations:

  • Merging of single-character alternations: 'a' | ['bc'] becomes [a-c].
  • Prefix merging: 'world' | 'wow' becomes wo(?:rld|w).
  • Empty alternatives: If the first or last alternative is empty, it is replaced with a ? or ?? quantifier.

These alternatives are sometimes combined. There is no guarantee regarding in which order the optimizations are applied.

Merging of alternatives is currently not supported if they are not adjacent.

  • Many optimizations added in Pomsky 0.12
  • Support for leading pipes added in Pomsky 0.6
  • Initial implementation in Pomsky 0.1