回到课程
本资料仅提供以下语言版本:English。请 帮助我们 将其翻译为 简体中文 版本。

查找 bbtag 对

“bb-tag” 形如 [tag]...[/tag]tag 匹配 burlquote 其中之一。

例如:

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

BB-tags 可以嵌套。但标签不能自嵌套,比如:

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

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

标签可以包含换行,通常为以下形式:

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

构造一个正则式用于查找所有 BB-tags 和其内容。

举例:

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] 中的斜杠,通常斜杠会关闭模式。