darsga qaytish

BB-teg juftlarini topish

“BB-teg” [tag]...[/tag] ko’rinishida bo’ladi, bu yerda tag quyidagilardan biri: b, url yoki quote.

Masalan:

[b]matn[/b]
[url]http://google.com[/url]

BB-teglar ichma-ich joylashtirilishi mumkin. Ammo teg o’zi ichiga o’zini joylashtira olmaydi, masalan:

Normal:
[url] [b]http://google.com[/b] [/url]
[quote] [b]matn[/b] [/quote]

Bo'lishi mumkin emas:
[b][b]matn[/b][/b]

Teglar qator uzilishlarini o’z ichiga olishi mumkin, bu normal:

[quote]
  [b]matn[/b]
[/quote]

Barcha BB-teglarni ularning tarkibi bilan topish uchun regexp yarating.

Masalan:

let regexp = /sizning regexpingiz/flags;

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

Agar teglar ichma-ich joylashgan bo’lsa, bizga tashqi teg kerak (agar xohlasak, uning tarkibida qidiruvni davom ettirishimiz mumkin):

let regexp = /sizning regexpingiz/flags;

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

Ochuvchi teg \[(b|url|quote)\].

Keyin yopuvchi teggacha hamma narsani topish uchun – yangi qatorni ham o’z ichiga olgan har qanday belgiga mos kelish uchun s bayrog’i bilan .*? naqshidan foydalanamiz va keyin yopuvchi tegga orqaga havola qo’shamiz.

To’liq naqsh: \[(b|url|quote)\].*?\[/\1\].

Amalda:

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

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

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

E’tibor bering, [ va ] ni escape qilishdan tashqari, yopuvchi teg [\/\1] uchun slashni ham escape qilishimiz kerak edi, chunki odatda slash naqshni yopadi.