REGEX协助嵌套模式?

时间:2011-09-10 23:55:52

标签: php javascript regex preg-replace

我需要解析以下字符串:

[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,但不会解析嵌套级别引号。我有什么想法可以证明这个表达方式吗?

2 个答案:

答案 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一样解析它。