The multiline mode is enabled by the flag
It only affects the behavior of
In the multiline mode they match not only at the beginning and the end of the string, but also at start/end of line.
In the example below the text has multiple lines. The pattern
/^\d/gm takes a digit from the beginning of each line:
Without the flag
m only the first digit is matched:
That’s because by default a caret
^ only matches at the beginning of the text, and in the multiline mode – at the start of any line.
“Start of a line” formally means “immediately after a line break”: the test
^ in multiline mode matches at all positions preceeded by a newline character
And at the text start.
The dollar sign
$ behaves similarly.
The regular expression
\d$ finds the last digit in every line
Without the flag
m, the dollar
$ would only match the end of the whole text, so only the very last digit would be found.
“End of a line” formally means “immediately before a line break”: the test
$ in multiline mode matches at all positions succeeded by a newline character
And at the text end.
To find a newline, we can use not only anchors
$, but also the newline character
What’s the difference? Let’s see an example.
Here we search for
\d\n instead of
As we can see, there are 2 matches instead of 3.
That’s because there’s no newline after
3 (there’s text end though, so it matches
Another difference: now every match includes a newline character
\n. Unlike the anchors
$, that only test the condition (start/end of a line),
\n is a character, so it becomes a part of the result.
\n in the pattern is used when we need newline characters in the result, while anchors are used to find something at the beginning/end of a line.