назад до уроку

Знайдіть пари ВВ-тегів

ВВ-тег має вигляд [tag]...[/tag], де tag – це один з: b, url або quote.

Наприклад:

[b]текст[/b]
[url]http://google.com[/url]

ВВ-теги можуть бути вкладеними. Але тег не може бути вкладеним сам у себе, наприклад:

Може бути:
[url] [b]http://google.com[/b] [/url]
[quote] [b]текст[/b] [/quote]

Не може бути:
[b][b]text[/b][/b]

Теги можуть мати розрив рядків, це допустимо:

[quote]
  [b]текст[/b]
[/quote]

Створіть регулярний вираз для пошуку всіх BB-тегів та їх вмісту.

Наприклад:

let regexp = /ваш регулярний вираз/прапорці;

let str = "..[url]http://google.com[/url]..";
alert( str.match(regexp) ); // [url]http://google.com[/url]

Якщо теги вкладені, тоді необхідно шукати зовнішній тег (за бажанням, можна продовжити пошук всередині його вмісту):

let regexp = /ваш регулярний вираз/прапорці;

let str = "..[url][b]http://google.com[/b][/url]..";
alert( str.match(regexp) ); // [url][b]http://google.com[/b][/url]

Відкриваючий тег – це \[(b|url|quote)].

Потім, щоб знайти все, до закриваючого тегу – використаємо вираз .*? з прапорцем s щоб знайти будь-які символи, включно з новим рядком, а потім додати зворотне посилання до закриваючого тегу.

Цілий вираз: \[(b|url|quote)\].*?\[/\1].

У дії:

let regexp = /\[(b|url|quote)].*?\[\/\1]/gs;

let str = `
  [b]hello![/b]
  [quote]
    [url]http://google.com[/url]
  [/quote]
`;

alert( str.match(regexp) ); // [b]hello![/b],[quote][url]http://google.com[/url][/quote]

Зверніть увагу, що крім екранування [, нам необхідно екранувати слеш у закриваючому тегу [\/\1], бо зазвичай слеш завершує вираз.