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>`без учета регистра.
Copy file name to clipboardExpand all lines: 9-regular-expressions/14-regexp-lookahead-lookbehind/article.md
+4Lines changed: 4 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -63,6 +63,10 @@ alert( str.match(/\d+(?!€)/) ); // 2 (в этот раз проигнорир
63
63
64
64
## Ретроспективная проверка
65
65
66
+
```warn header="Браузерная совместимость с ретроспективной проверкой"
67
+
Обратите внимание: Lookbehind не поддерживается в браузерах построенных не на движке V8, таких как Safari и Internet Explorer.
68
+
```
69
+
66
70
Опережающие проверки позволяют задавать условия на то, что "идёт после".
67
71
68
72
Ретроспективная проверка выполняет такую же функцию, но с просмотром назад. Другими словами, она находит соответствие шаблону, только если перед ним есть что-то заранее определённое.
0 commit comments