先頭に挿入
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>
の後の挿入です。
追伸 レギュラー表現フラグ(
や s
など)も役立ちます。i
。/<body.*?>/si
フラグはドット s
を改行文字と一致させ、.
フラグは i
を大文字/小文字を無視した <body>
とも一致させます。<BODY>