为JavaScript正则表达式找到一个内部模式倍数的优雅的单个正则表达式



以下是匹配文本:

bla bla bla <!--[mixed token 1][mixed token 2][...]-->

我只想要text.match(/…/)数组中的标记。

我可以通过首先匹配注释中的所有内容,然后在[mixed token 1][mixed token 2]上运行第二个模式来解决这个问题,但我尝试过的其他所有内容都没有得到干净的结果。

这样的东西对于一个只有一个标记模式的文本来说效果很好,但不能解决上面的问题。/<!--[(.*?)]-->/

我想出的下一个最好的总是想返回"mixed token 1][mixed token 2"

@请注意,目标是不限制评论书结尾中可以存在的[令牌]集的数量

regexr是基于jcaron在下的工作启动的

您可以尝试:

/<!--(?:[([^]]+)])(?:[([^]]+)])?(?:[([^]]+)])?(?:[([^]]+)])?(?:[([^]]+)])?(?:[([^]]+)])?-->/

您可以添加更多可选的非捕获组来捕获更多的令牌,当然,您可能需要处理令牌之间或周围的空格等。

示例:

"bla bla bla <!--[mixed token 1][mixed token 2]-->".match(/<!--(?:[([^]]+)])(?:[([^]]+)])?(?:[([^]]+)])?(?:[([^]]+)])?(?:[([^]]+)])?(?:[([^]]+)])?-->/)

结果:

["<!--[mixed token 1][mixed token 2]-->", "mixed token 1", "mixed token 2", undefined, undefined, undefined, undefined]

因此,您可以得到位于位置1的令牌,并返回数组中的后续令牌。

显然,这不像匹配整个注释然后使用另一个正则表达式匹配或某种拆分那样通用。

最新更新