In this lesson, we will look at modifiers in regular expressions. Modifiers are used differently in JavaScript than in the examples, so use PCRE to experiment with them.
In the example below, the regular expression corresponds to a single substring:
/(?:t.)-(?:t.)
/
ta-tu
ta-t
Tu-tu tu-T
Here, we have matched two groups of hyphenated ta-tu
, each corresponding to this condition —t
and any character. A grouping without backreferencing will only find a whole expression but not two separate groups.
The rest of the characters in the string does not match. Among them are capital T
and a line break. We have not found:
- The capital
T
because the charactert
in the expression is in lowercase - The line break because periods do not include a line break by default
We can modify the expression slightly to include the other substring from the example. To do this, we use a modifier.
Modifiers are characters specified after ?
in a group of regular expression characters to change their behavior. If we put i
after ?
, it will ignore case sensitivity, and we get a match with another substring. But instead of lower case t
we have an upper case T
:
/(?i:t.)-(?:t.)
/
ta-tu
ta-t
Tu-tu
tu-T
Imagine we capitalize the second part of the substring after the hyphen in Tu-tu
. There would not be a match because the modifier only works within the group where we defined it:
/(?i:t.)-(?:t.)
/
ta-tu
ta-t
Tu-Tu tu-T
So let us duplicate the i
modifier in the second group to get a match for Tu-Tu
in the string:
/(?i:t.)-(?i:t.)
/
ta-tu
ta-t
Tu-Tu
tu-T
This entry is a shorter version of its counterpart: (?:[tT].)-(?:[tT].)
.
We can also place modifiers in separate groups:
/(?i)(t.)-(?i)(t.)
ta-tu
ta-t
Tu-Tu
tu-T
But in this case, we allocate our memory for four groups of matches.
Here we will look at another modifier — s
. It makes it so that periods include line breaks and carriage returns. We already know that periods do not include them by default. The substrings ta-t
and tu-T
have line breaks, so we do not process them.
We will put the modifier s
in the second group; now all the substrings are matched:
/(?i:t.)-(?si:t.)
/
ta-tu ta-t
Tu-Tu tu-T
Modifiers can be disabled. All you have to do is put -
before them. Let's add -
to the first group and look at our example:
/(?-i:t.)-(?si:t.)
/
ta-tu ta-t
Tu-Tu tu-T
Also, we can combine active and disabled modifiers. We can add s
and disable i
and m
:
/(?s-im:t.)-(?si:t.)
/
ta-tu ta-t
Tu-Tu tu-T
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.