Найдите пары 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]
, потому что обычно слеш завершает паттерн.