You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
В строке замены `$&` означает само совпадение, то есть мы заменяем `pattern:<body.*?>` заменяется на самого себя плюс `<h1>Hello</h1>`.
15
+
В строке замены `$&` означает само совпадение, то есть мы заменяем ту часть текста которая соответствует `pattern:<body.*?>`. Совпадение заменяется на самого себя плюс `<h1>Hello</h1>`.
15
16
16
17
Альтернативный вариант - использовать ретроспективную проверку:
Такое регулярное выражение на каждой позиции будет проверять, не идёт ли прямо перед ней `pattern:<body.*?>`. Если да - совпадение найдено. Но сам тег `pattern:<body.*?>` в совпадение не входит, он только участвует в проверке. А других символов после проверки в нём нет, так что текст совпадения будет пустым.
26
+
Как вы можете видеть, в этом регулярном выражении есть только ретроспективная часть.
27
+
28
+
Это работает вот так:
29
+
- В каждой позиции текста.
30
+
- Проверяет не предшествует ли ему `pattern:<body.*?>`.
31
+
- Если это так, то мы встретили совпадение.
32
+
33
+
Тег `pattern:<body.*>` не вернётся. Результатом этого регулярного выражения является буквально пустая строка, но она совпадает только в позициях, предшествующих `pattern:<body.*>`.
26
34
27
-
Происходит замена "пустой строки", перед которой идёт`pattern:<body.*?>` на `<h1>Hello</h1>`. Что, как раз, и есть вставка этой строки после `<body>`.
35
+
Мы заменяем "пустую строку", которая предшествует`pattern:<body.*?>` на `<h1>Hello</h1>`. Что, как раз, и есть вставка этой строки после `<body>`.
28
36
29
-
P.S. Этому регулярному выражению не помешают флаги: `pattern:/<body.*?>/si`, чтобы в "точку" входил перевод строки (тег может занимать несколько строк), а также чтобы теги в другом регистре типа `match:<BODY>`тоже находились.
37
+
P.S. Флаги регулярных выражений, такие как `pattern:s` и `pattern:i`, также могут быть полезны: `pattern:/<body.*?>/si`. Флаг `pattern:s` создает точечный `pattern:.` соответствует символу новой строки, а флаг `pattern:i` делает `pattern:<body>` также соответствующим `match:<BODY>`без учета регистра.
0 commit comments