Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/426.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何匹配正则表达式中的所有MyCode,包括嵌套标记?_Javascript_Regex_Mybb - Fatal编程技术网

Javascript 如何匹配正则表达式中的所有MyCode,包括嵌套标记?

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

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 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的方法


但这里有一个基于正则表达式的解决方案:

这不是一种常规语言,因此您不能在这里使用正则表达式。