【问题标题】:Javascript Regex matching multiple repeating blocksJavascript 正则表达式匹配多个重复块
【发布时间】:2023-03-19 01:29:01
【问题描述】:

我需要在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>
....

我目前的正则表达式模式是:

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

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

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

【问题讨论】:

    标签: javascript regex pattern-matching match


    【解决方案1】:

    使用非贪婪的正则表达式:

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

    RegEx Demo

    区别是 [\S\s]+?[\S\s]+ 是一个贪婪的 rexex,并尽可能匹配直到最后一个 &lt;/VirtualHost&gt; 匹配。

    【讨论】:

    • 我知道这将是一个简单的答案。非常感谢!当 SO 允许我时,我会这样标记。不贪心,学习新东西!
    • 更深入的解释为什么这个工作将不胜感激。感觉太缺乏了,不值得点赞。
    • 好的,我在回答中添加了解释以使其更清楚。
    • @anubhava 效果很好,我今天学到了一些新东西。我很感激。
    猜你喜欢
    • 2015-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-06
    • 1970-01-01
    相关资源
    最近更新 更多