用于解析标签的简单 JavaScript 正则表达式

问题描述 投票:0回答:3

我有一个简单的正则表达式:

\[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 regex parsing bbcode
3个回答
2
投票

正则表达式不是解析嵌套结构化文本的好选择。请参阅这个问题了解 JavaScript BBCode 解析器


0
投票

试试这个:

\[quote\]{1,}(.*?)\[\/quote\]

0
投票

我创建了一个示例 JavaScript BBCode 解析器来处理这种情况。我认为我解决了这种情况,因为 JavaScript 的字符串替换函数可以接受另一个函数,因此您可以使解析器递归地处理输入的较小部分。不过,我已经有一段时间没看过它了。您可以在此处查看它的运行情况,并在同一页面上下载它(下载链接位于标题下方 - “您可以在此处下载为此的 JavaScript 模块。”):

http://patorjk.com/bbcode-previewer/

© www.soinside.com 2019 - 2024. All rights reserved.