レッスンに戻る

bbタグのペアを見つける

“bbタグ” は [tag]...[/tag] のように見えるもので、ここでは tagb, url または quote のいずれかです。

例:

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

BBタグはネストできます。しかし次の例のように、自身の中でネストすることはできません。:

通常:
[url] [b]http://google.com[/b] [/url]
[quote] [b]text[/b] [/quote]

不可:
[b][b]text[/b][/b]

タグは改行を含むことができ、それは普通のことです:

[quote]
  [b]text[/b]
[/quote]

それらの内容をもつすべての BBタグを見つける正規表現を作成してください。

例:

let reg = /your regexp/g;

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

タグがネストしている場合は外側のタグを必要とします(コンテンツ内で検索を続けたい場合):

let reg = /your regexp/g;

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

開始タグは \[(b|url|quote)\] です.

次に、閉じタグまでの内容を見つけるため – 改行を含む任意の文字にマッチするパターン [\s\S]*? を追加し、その後閉じタグへの後方参照を追加しましょう。

完全なパターンは: \[(b|url|quote)\][\s\S]*?\[/\1\].

動作:

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

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

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

閉じタグ [/\1] ではスラッシュをエスケープしなければならないことに注意してください。通常、スラッシュはパターンの終了を意味するためです。