返回课程

查找 bbtag 对

一个“bb-tag”看起来像 [tag]...[/tag],其中 tag 是以下之一:burlquote

例如

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

BB-tag 可以嵌套。但一个标签不能嵌套到自身,例如

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