我有以下字符串需要解析:
[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=(.*?)]([sS]*?)[/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一样,这一直是正则表达式的难点。
我建议您对字符串进行标记,并使用递归下降解析器对其进行解析。