Javascript 如何匹配正则表达式中的所有MyCode,包括嵌套标记?
MyCode是MyBB的一个基于标记的格式化系统。与捕获相关的示例格式有:Javascript 如何匹配正则表达式中的所有MyCode,包括嵌套标记?,javascript,regex,mybb,Javascript,Regex,Mybb,MyCode是MyBB的一个基于标记的格式化系统。与捕获相关的示例格式有: [quote]This is a quote[/quote] [quote=Bob]This is a quote, [b]this bit is bold[/b], [quote] this is a nested quote [/quote][/quote] [url=http://www.stackoverflow.com][color=#ff0000]This is an anchor with a red
[quote]This is a quote[/quote]
[quote=Bob]This is a quote, [b]this bit is bold[/b], [quote] this is a nested quote [/quote][/quote]
[url=http://www.stackoverflow.com][color=#ff0000]This is an anchor with a red text color.[/color][/url]
[quote][b]
Tags can also span multiple lines.
[img]http://www.website.com/image.png[/img]
[/b]
[/quote]
到目前为止,我已经编写了正则表达式,它成功地捕获了其中的大部分内容,但未能捕获某些嵌套元素。我觉得我需要正则表达式来匹配“内部优先”,但我不知道如何做到这一点(如果可能的话)
例如,在:[quote]测试[b]粗体[/b][/quote]
的情况下,它需要首先检查内部[b]标记,然后检查[quote]标记。这同样适用于:[quote][quote]嵌套的[/quote][quote]
这是我到目前为止写的东西,我对它进行了注释,以帮助解释我自己
\[(.*?)(=[^]]+)?]([\s\S]*?)\[\/\1]
虽然严格来说,这里不能使用正则表达式在技术上是正确的,但这与其说是正确的,不如说是错误的。很少有语言有严格规则的正则表达式实现,最流行的正则表达式库(PCRE)对此任务没有任何问题 现在,在正则表达式中这样做是一个糟糕的主意。重做、可读性、可维护性等等,在regex中都非常糟糕,这些问题本身就可能排除基于regex的方法
但这里有一个基于正则表达式的解决方案:这不是一种常规语言,因此您不能在这里使用正则表达式。