我有一个简单的正则表达式:
\[quote\](.*?)\[\/quote\]
它将用 table、tr 和 td 替换 [quote]。 (以及 /td、/tr 和 /table 的 [/quote])
它非常适合同一字符串中的多个单独引号:
即:
[quote]
Person 1
[/quote]
Person 3 talking about a quote
[quote]
Person 2
[/quote]
Person 3 talking about another quote.
但是当它尝试替换同一字符串中的多个(非单独)引号时:
即:
[quote]
[quote]
Person 1
[/quote]
Person 2 quoting person 1
[/quote]
Person 3 quoting person 2 and 1
它搞砸了,(当它应该将第二个引号与第一个/quote匹配并且第一个引号与最后一个/quote匹配时,将第一个引号与第一个/quote匹配)
我如何编辑正则表达式,使其在两个示例中都有效?
正则表达式不是解析嵌套结构化文本的好选择。请参阅这个问题了解 JavaScript BBCode 解析器
试试这个:
\[quote\]{1,}(.*?)\[\/quote\]
我创建了一个示例 JavaScript BBCode 解析器来处理这种情况。我认为我解决了这种情况,因为 JavaScript 的字符串替换函数可以接受另一个函数,因此您可以使解析器递归地处理输入的较小部分。不过,我已经有一段时间没看过它了。您可以在此处查看它的运行情况,并在同一页面上下载它(下载链接位于标题下方 - “您可以在此处下载为此的 JavaScript 模块。”):