查找 bbtag 对
“bb-tag” 形如 [tag]...[/tag]
,tag
匹配 b
、url
或 quote
中之一。
例如:
[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 regexp = /your regexp/flags;
let str = "..[url]http://google.com[/url]..";
alert( str.match(regexp) ); // [url]http://google.com[/url]
如果标签嵌套,那么我们需要记录匹配的外层标签(如果需要,我们可以继续在其内容中搜索):
let 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]
转义一个斜线,因为通常斜线会关闭模式。