查找 bbtag 对
一个“bb-tag”看起来像 [tag]...[/tag]
,其中 tag
是以下之一:b
、url
或 quote
。
例如
[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]
,因为通常斜杠会关闭模式。