2015-03-02 26 views
1

我需要匹配一系列的Javascript重复VirtualHost CONFIGS的,例如:的Javascript正则表达式匹配多个重复块

... 
# 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> 
.... 

我现在的正则表达式是:

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

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

我想放什么输出是一个数组,它是:[<first vhost>, <second vhost>, <third vhost>, ...]任何帮助将是美好的!

回答

2

使用非贪婪正则表达式:

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

RegEx Demo

不同的是[\S\s]+? VS [\S\s]+这是一个贪婪的rexex并尽可能匹配,直到最后</VirtualHost>匹配。

+1

我知道这将是一个简单的答案。非常感谢!当SO让我时,我会这样标记。 非贪心,学习新东西! – tbremer 2015-03-02 07:25:39

+0

为什么这个作品更深入的解释将不胜感激。感觉太缺乏应得的赞赏。 – m59 2015-03-02 07:27:01

+1

好的,我在答案中添加了一个解释,使其更加清晰。 – anubhava 2015-03-02 07:32:25