Regular Expressions (Regexp)

Theory: Search by condition

Regex supports searching by condition. This is probably one of the most complex constructs that exists in regex and is not supported in JavaScript, or many other programming languages. In some languages, you need to consider the specifics of its implementation, for example, Python supports conditional searching using grouping with backreferencing and with named groups.

It resembles a ternary operator from programming languages and looks like this: (?ifthen|else).

Let's look at an example of how it works:


/(?(?<=a)m|p)/

mam,pap


We see outside brackets with ?, and inside are two separate expressions:

  • The first is the condition (?<=a), which checks if the character on the left matches a.
  • Next comes the alternative, and we choose between m and p depending on whether the condition worked or not.

You can describe this construction as follows: “Find all instances of m that are preceded either by an a or by a p preceded by no a».

Let's break down the search in our string character by character:

  • the condition is checked to see if the current character is m and if a comes before it. Since the condition hasn't been met, it'll attempt to extract p, which is also not the current character;
  • the second a doesn't fit the conditions, the missing substring ma, then m,pap is checked;
  • the third character m corresponds to m, previously was amatch was found;
  • the fourth character , does not fit the conditions, the missing substring mam,, then it is checked pap;
  • the fifth character p does not correspond to am, but corresponds to p — a second match is found;
  • he sixth character a again triggers the check for the next character to match m;
  • the seventh character p fails the m-check.

That's how we got two matches in the string as a result of the conditional search.

Recommended programs