我需要解析以下字符串:
[QUOTE=Mark]
[QUOTE=Jack]
How are you doing Mark?
[/QUOTE]
Good to hear from you Jack, Im doing fine!
[/QUOTE]
我基本上试图通过使用以下REGEX将[quote]区域转换为风格化的DIV来将这组BBCode转换为HTML
text = text.replace(/\[QUOTE=(.*?)]([\s\S]*?)\[\/QUOTE\]/gi, '<div class="quotes"><i>Quote by $1</i><br />$2</div>');
此代码将正确解析第一组QUOTES,但不会解析嵌套级别引号。我有什么想法可以证明这个表达方式吗?
答案 0 :(得分:4)
如果这就是你所做的一切,那么解决方案就更简单了:
text = text.replace(/\[QUOTE=(.*?)\]/gi,
'<div class="quotes"><i>Quote by $1</i><br />');
text = text.replace(/\[\/QUOTE\]/gi, '</div>');
您的代码也可以使用,但是您必须多次应用它 - 在这种情况下需要两次,但如果有三重嵌套的引号,则必须进行三次传递,依此类推。
答案 1 :(得分:3)
当你进入嵌套级别时,你会失去输入的“常规”性质。它变得更像“context free”,如HTML which is always a hard spot for regexes。
我建议您对字符串进行标记,然后像recursive descent parser一样解析它。