Найдите пары BB-кодов
BB-код имеет вид [tag]...[/tag]
, где tag
– это один из: b
, url
или quote
.
Например:
[b]текст[/b]
[url]http://ya.ru[/url]
BB-коды могут быть вложенными. Но сам в себя тег не может быть вложен, например:
Возможно:
[url] [b]http://ya.ru[/b] [/url]
[quote] [b]текст[/b] [/quote]
Не может быть:
[b][b]текст[/b][/b]
Теги могут содержать переносы строк, это допустимо:
[quote]
[b]текст[/b]
[/quote]
Создайте регулярное выражение для поиска всех BB-кодов и их содержимого.
Например:
let regexp = /ваше регулярное выражение/флаги;
let str = "..[url]http://ya.ru[/url]..";
alert( str.match(regexp) ); // [url]http://ya.ru[/url]
Если теги вложены, то нужно искать самый внешний тег (при желании можно продолжить поиск в его содержимом):
let regexp = /ваше регулярное выражение/флаги;
let str = "..[url][b]http://ya.ru[/b][/url]..";
alert( str.match(regexp) ); // [url][b]http://ya.ru[/b][/url]
Открывающий тег – это \[(b|url|quote)]
.
Затем, чтобы найти всё до закрывающего тега – используем выражение .*?
с флагом s
: оно найдёт любые символы, включая новую строку, и затем добавим обратную ссылку на открывающий тег.
Полное выражение: \[(b|url|quote)\].*?\[/\1]
.
В действии:
let regexp = /\[(b|url|quote)].*?\[\/\1]/gs;
let str = `
[b]привет![/b]
[quote]
[url]http://ya.ru[/url]
[/quote]
`;
alert( str.match(regexp) ); // [b]привет![/b],[quote][url]http://ya.ru[/url][/quote]
Обратите внимание, что кроме экранирования [
нам необходимо экранировать слеш в закрывающем теге [\/\1]
, потому что обычно слеш завершает паттерн.