bbタグのペアを見つける
「bbタグ」は[tag]...[/tag]
のようであり、ここでtag
は次のいずれかです: b
、url
、または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]
のスラッシュをエスケープする必要があることに注意してください。通常、スラッシュはパターンを閉じます。