Javascript 匹配多个重复块的正则表达式

Javascript Regex matching multiple repeating blocks

我需要在 Javascript 中匹配一系列重复的 VirtualHost 配置,示例:

...
# First VHost...
<VirtualHost *:80 *:8082>
    # Any number of configs
    # and set up options for
    # Apache
</VirtualHost>

# Second VHost...
<VirtualHost *:80 *:8082>
    # Any number of configs
    # and set up options for
    # Apache
</VirtualHost>

# Third VHost...
<VirtualHost *:80 *:8082>
    # Any number of configs
    # and set up options for
    # Apache
</VirtualHost>
....

我当前的 RegEx 模式是:

/<VirtualHost[*:0-9\s]+>([\S\s]+)<\/VirtualHost>/g

我知道我的捕获组是我只得到一个匹配集(整个字符串原样)的原因,但我不知道如何捕获 VirtualHost 块之间的内容。

我想输出的是一个数组,它是:[<first vhost>, <second vhost>, <third vhost>, ...]任何帮助都会很棒!

使用非贪婪正则表达式:

/<VirtualHost[*:0-9\s]+>([\S\s]+?)<\/VirtualHost>/g

RegEx Demo

区别在于 [\S\s]+?[\S\s]+,后者是一个贪婪的 rexex,会尽可能多地匹配,直到匹配到最后一个 </VirtualHost>