
为了在`<body>`标记之后插入，我们必须首先找到它。我们可以使用正则表达式模式`<body.*？>`来实现这一点。

在这个任务中，我们不需要修改`<body>`标记。我们只需要在它后面添加文本。

我们可以这样做：
```js run
let str = '...<body style="...">...';
str = str.replace(/<body.*>/, '$&<h1>Hello</h1>');
alert(str); // ...<body style="..."><h1>Hello</h1>...
```
在替换字符串中，`$&`表示匹配本身，即源文本中与`<body.*？>`相对应的部分。它会被自身加上`<h1>Hello</h1>`替换。

另一种方法是使用后瞻断言：

```js run
let str = '...<body style="...">...';
str = str.replace(/(?<=<body.*>)/, `<h1>Hello</h1>`);
alert(str); // ...<body style="..."><h1>Hello</h1>...
```
正如您所看到的，这个正则表达式中只有后瞻断言部分

它的工作原理如下：
* 在文本中的每个位置。
* 检查它之前是否有<body.*？>。
* 如果存在，就匹配该位置。

这个标签 `<body.*?>`在这里并没有作为捕获返回，实际上它匹配到了一个在`<body.*?>`后的空字符串（位置）。
因此，它将紧接`<body.*？>`的“空行”替换为`<h1>Hello</h1>`。这样就在`<body>`之后插入了内容。

P.S. 正则式中单标记如`s` 和 `i` 也经常被使用，如: `/<body.*?>/si`. 这里 `s`标记使得 `.`可以匹配换行符，而`i` 标记表示大小写不敏感，即 `<body>` 和 `<BODY>`都可以被匹配。
