レッスンに戻る

bbタグのペアを見つける

「bbタグ」は[tag]...[/tag]のようであり、ここでtagは次のいずれかです: burl、またはquote

例えば

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

BBタグはネストできます。しかし、タグ自体にネストすることはできません。例えば

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

Can't happen:
[b][b]text[/b][/b]

タグには改行を含めることができ、それは普通です

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

内容を含むすべてのBBタグを見つける正規表現を作成します。

例えば

let regexp = /your regexp/flags;

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

タグがネストされている場合、外側のタグが必要です (コンテンツで検索を続けたい場合)

let regexp = /your regexp/flags;

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

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

次に終了タグまですべてを見つけるには、改行文字を含む任意の文字と一致するフラグsを備えたパターン.*?を使用して、終了タグへの逆参照を追加します。

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

実行時

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

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

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

[をエスケープすることに加えて、終了タグ[\/\1]のスラッシュをエスケープする必要があることに注意してください。通常、スラッシュはパターンを閉じます。