Вернуться к уроку

Найдите пары тегов

ББ-тег имеет вид [имя]...[/имя], где имя – слово, одно из: b, url, quote.

Например:

[b]текст[/b]
[url]http://ya.ru[/url]

ББ-теги могут быть вложенными, но сам в себя тег быть вложен не может, например:

Допустимо:
[url] [b]http://ya.ru[/b] [/url]
[quote] [b]текст[/b] [/quote]

Нельзя:
[b][b]текст[/b][/b]

Создайте регулярное выражение для поиска ББ-тегов и их содержимого.

Например:

var re = /* регулярка */

var str = "..[url]http://ya.ru[/url]..";
alert( str.match(re) ); // [url]http://ya.ru[/url]

Если теги вложены, то нужно искать самый внешний тег (при желании можно будет продолжить поиск в его содержимом):

var re = /* регулярка */

var str = "..[url][b]http://ya.ru[/b][/url]..";
alert( str.match(re) ); // [url][b]http://ya.ru[/b][/url]

Открывающий тег – это \[(b|url|quote)\].

Для того, чтобы найти всё до закрывающего – используем ленивый поиск [\s\S]*? и обратную ссылку на открывающий тег.

Итого, получится: \[(b|url|quote)\][\s\S]*?\[/\1\].

В действии:

var re = /\[(b|url|quote)\][\s\S]*?\[\/\1\]/g;

var str1 = "..[url]http://ya.ru[/url]..";
var str2 = "..[url][b]http://ya.ru[/b][/url]..";

alert( str1.match(re) ); // [url]http://ya.ru[/url]
alert( str2.match(re) ); // [url][b]http://ya.ru[/b][/url]

Для закрывающего тега [/1] понадобилось дополнительно экранировать слеш: \[\/1\].