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
,p
ap
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 matchesa
. - Next comes the alternative, and we choose between
m
andp
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 ifa
comes before it. Since the condition hasn't been met, it'll attempt to extractp
, which is also not the current character; - the second
a
doesn't fit the conditions, the missing substringma
, thenm,pap
is checked; - the third character
m
corresponds tom
, previously wasa
— match was found; - the fourth character
,
does not fit the conditions, the missing substringmam,
, then it is checkedpap
; - the fifth character
p
does not correspond toam
, but corresponds top
— a second match is found; - he sixth character
a
again triggers the check for the next character to matchm
; - the seventh character
p
fails them
-check.
That's how we got two matches in the string as a result of the conditional search.
Recommended materials
Are there any more questions? Ask them in the Discussion section.
The Hexlet support team or other students will answer you.
For full access to the course you need a professional subscription.
A professional subscription will give you full access to all Hexlet courses, projects and lifetime access to the theory of lessons learned. You can cancel your subscription at any time.