29 lines
2.1 KiB
Markdown
29 lines
2.1 KiB
Markdown
|
||
Для того, чтобы вставить после тега `<body>`, нужно вначале его найти. Будем использовать регулярное выражение `pattern:<body.*>`.
|
||
|
||
Далее, нам нужно оставить сам тег `<body>` на месте и добавить текст после него.
|
||
|
||
Это можно сделать вот так:
|
||
```js run
|
||
let str = '...<body style="...">...';
|
||
str = str.replace(/<body.*>/, '$&<h1>Hello</h1>');
|
||
|
||
alert(str); // ...<body style="..."><h1>Hello</h1>...
|
||
```
|
||
|
||
В строке замены `$&` означает само совпадение, то есть мы заменяем `pattern:<body.*>` заменяется на самого себя плюс `<h1>Hello</h1>`.
|
||
|
||
Альтернативный вариант - использовать ретроспективную проверку:
|
||
|
||
```js run
|
||
let str = '...<body style="...">...';
|
||
str = str.replace(/(?<=<body.*>)/, `<h1>Hello</h1>`);
|
||
|
||
alert(str); // ...<body style="..."><h1>Hello</h1>...
|
||
```
|
||
|
||
Такое регулярное выражение на каждой позиции будет проверять, не идёт ли прямо перед ней `pattern:<body.*>`. Если да - совпадение найдено. Но сам тег `pattern:<body.*>` в совпадение не входит, он только участвует в проверке. А других символов после проверки в нём нет, так что текст совпадения будет пустым.
|
||
|
||
Происходит замена "пустой строки", перед которой идёт `pattern:<body.*>` на `<h1>Hello</h1>`. Что, как раз, и есть вставка этой строки после `<body>`.
|
||
|
||
P.S. Этому регулярному выражению не помешают флаги: `pattern:/<body.*>/si`, чтобы в "точку" входил перевод строки (тег может занимать несколько строк), а также чтобы теги в другом регистре типа `match:<BODY>` тоже находились.
|