ÐÑÑавка пÑÑÐ»Ñ Head
У Ð½Ð°Ñ Ñ ÑÑдок з HTML-докÑменÑом.
ÐапиÑÑÑÑ ÑегÑлÑÑний виÑаз Ñкий вÑÑавлÑÑ <h1>ÐÑивÑÑ</h1> одÑÐ°Ð·Ñ Ð¿ÑÑÐ»Ñ ÑÐµÐ³Ñ <body>. Тег може маÑи аÑÑибÑÑи.
ÐÑиклад:
let regexp = /Ð²Ð°Ñ ÑегÑлÑÑний виÑаз/;
let str = `
<html>
<body style="height: 200px">
...
</body>
</html>
`;
str = str.replace(regexp, `<h1>ÐÑивÑÑ</h1>`);
ÐÑÑÐ»Ñ ÑÑого знаÑÐµÐ½Ð½Ñ str Ð¼Ð°Ñ Ð±ÑÑи:
<html>
<body style="height: 200px"><h1>ÐÑивÑÑ</h1>
...
</body>
</html>
Щоб вÑÑавиÑи пÑÑÐ»Ñ ÑÐµÐ³Ñ <body> , нам поÑÑÑбно ÑпеÑÑÑ Ð¹Ð¾Ð³Ð¾ знайÑи. Ðи можемо викоÑиÑÑаÑи Ð´Ð»Ñ ÑÑого ÑегÑлÑÑний виÑаз <body.*?>.
Ð ÑÑÐ¾Ð¼Ñ Ð·Ð°Ð²Ð´Ð°Ð½Ð½Ñ Ð½Ð°Ð¼ не поÑÑÑбно змÑнÑваÑи Ñег <body>. Ðам поÑÑÑбно ÑÑлÑки додаÑи ÑекÑÑ Ð¿ÑÑÐ»Ñ Ð½Ñого.
ÐÑÑ Ñаким Ñином ми можемо Ñе зÑобиÑи:
let str = '...<body style="...">...';
str = str.replace(/<body.*?>/, '$&<h1>ÐÑивÑÑ</h1>');
alert(str); // ...<body style="..."><h1>ÐÑивÑÑ</h1>...
в замÑÐ½ÐµÐ½Ð¾Ð¼Ñ ÑÑÐ´ÐºÑ $& ознаÑÐ°Ñ ÑпÑвпадÑÐ½Ð½Ñ Ñаме по ÑобÑ, ÑобÑо, ÑаÑÑина виÑ
Ñдного ÑекÑÑÑ Ñка вÑдповÑÐ´Ð°Ñ ÑÐ°Ð±Ð»Ð¾Ð½Ñ <body.*?>. ÐÑ Ð·Ð°Ð¼Ñнено на Ð½ÐµÑ Ð¶ плÑÑ <h1>ÐÑивÑÑ</h1>.
ÐлÑнеÑнаÑÐ¸Ð²Ð¾Ñ Ð±Ñло би викоÑиÑÑÐ°Ð½Ð½Ñ Ð·Ð²Ð¾ÑоÑнÑÐ¾Ñ Ð¿ÐµÑевÑÑки:
let str = '...<body style="...">...';
str = str.replace(/(?<=<body.*?>)/, `<h1>ÐÑивÑÑ</h1>`);
alert(str); // ...<body style="..."><h1>ÐÑивÑÑ</h1>...
Як баÑиÑе, в ÑÑÐ¾Ð¼Ñ ÑегÑлÑÑÐ½Ð¾Ð¼Ñ Ð²Ð¸ÑÐ°Ð·Ñ Ñ ÑÑлÑки звоÑоÑÐ½Ñ Ð¿ÐµÑевÑÑка.
Це пÑаÑÑÑ Ñаким Ñином:
- Ðа кожнÑй позиÑÑÑ Ð² ÑекÑÑÑ.
- ÐеÑевÑÑÑе, Ñи Ð¹Ð¾Ð¼Ñ Ð¿ÐµÑедÑÑ
<body.*?>. - ЯкÑо Ñе Ñак, Ñо Ñ Ð½Ð°Ñ Ñ ÑпÑвпадÑннÑ.
The tag <body.*?> wonât be returned. The result of this regexp is literally an empty string, but it matches only at positions preceded by <body.*?>.
So it replaces the âempty lineâ, preceded by <body.*?>, with <h1>Hello</h1>. Thatâs the insertion after <body>.
P.S. Regexp flags, such as s and i can also be useful: /<body.*?>/si. The s flag makes the dot . match a newline character, and i flag makes <body> also match <BODY> case-insensitively.