レッスンに戻る

先頭に挿入

HTMLドキュメントを含む文字列があります。

<h1>こんにちは</h1><body>タグの直後に挿入する正規表現を作成してください。タグには属性がある可能性があります。

たとえば

let regexp = /your regular expression/;

let str = `
<html>
  <body style="height: 200px">
  ...
  </body>
</html>
`;

str = str.replace(regexp, `<h1>Hello</h1>`);

その後、strの値は次のようになります。

<html>
  <body style="height: 200px"><h1>Hello</h1>
  ...
  </body>
</html>

<body>タグの後に挿入するには、まずそれを見つける必要があります。それには正規表現パターン<body.*?>を使用できます。

このタスクでは、<body>タグを変更する必要はありません。後からテキストを追加するだけです。

方法は次のとおりです。

let str = '...<body style="...">...';
str = str.replace(/<body.*?>/, '$&<h1>Hello</h1>');

alert(str); // ...<body style="..."><h1>Hello</h1>...

置換文字列$&は、それ自体が一致、つまり<body.*?>に対応するソーステキストの部分です。それはそれ自体と<h1>こんにちは</h1>に置き換わります。

代替案は、後方参照を使用することです

let str = '...<body style="...">...';
str = str.replace(/(?<=<body.*?>)/, `<h1>Hello</h1>`);

alert(str); // ...<body style="..."><h1>Hello</h1>...

ご覧のとおり、この正規表現には後方参照部分しかありません。

このように機能します。

  • テキスト内のすべて的位置で。
  • それが<body.*?>に先行されているかどうかを確認します。
  • そうである場合は、一致があります。

タグ<body.*?>は返されません。この正規表現の結果は文字どおり空の文字列ですが、<body.*?>に先行する位置のみと一致します。

したがって、<body.*?>に先行する「空行」を<h1>こんにちは</h1>に置き換えます。それが<body>の後の挿入です。

追伸 レギュラー表現フラグ(si など)も役立ちます。/<body.*?>/sis フラグはドット . を改行文字と一致させ、i フラグは <body> を大文字/小文字を無視した <BODY> とも一致させます。