REGEX帮助嵌套模式


REGEX assistance with nested pattern?

我有以下字符串需要解析:

[QUOTE=Mark]
  [QUOTE=Jack]
    How are you doing Mark?
  [/QUOTE]
 Good to hear from you Jack, Im doing fine!
[/QUOTE]

我基本上是在尝试将这组BBCode转换为HTML,通过将[quote]区域转换为使用以下REGEX格式化div

text = text.replace(/'[QUOTE=(.*?)](['s'S]*?)'['/QUOTE']/gi, '<div class="quotes"><i>Quote by $1</i><br />$2</div>');

这段代码将正确解析出第一组引号,但不能解析嵌套的级别引号。你知道我该如何改进这个表达吗?

如果这就是您要做的,那么解决方案要简单得多:

text = text.replace(/'[QUOTE=(.*?)']/gi,
                    '<div class="quotes"><i>Quote by $1</i><br />');
text = text.replace(/'['/QUOTE']/gi, '</div>');

您的代码也可以工作,但您必须多次应用它——在本例中是两次,但如果有三套引号,您将不得不进行三次传递,等等。

当您进入嵌套级别时,您将失去输入的"规则"性质。它变得更加"上下文无关",就像HTML一样,这一直是正则表达式的难点。

我建议您对字符串进行标记,并使用递归下降解析器对其进行解析。