javascript - 为什么我的正则表达式模式只捕获最后一对?它应该捕获每场比赛中的所有对

标签 javascript regex

我的问题是:为什么我的正则表达式模式只捕获最后一对?它应该捕获每场比赛中的所有对。

我这里有这个字符串:

[Profile0]
Name=Main
IsRelative=1
Path=Profiles/vr10qb8s.default
Default=1

[Profile1]
Name=Clean
IsRelative=1
Path=Profiles/k46wtieb.clean

我在上面运行这个脚本:

        var patt = /\[(.*?)\](?:\s+?(.+?)=(.+))+/g;
        var blocks = [];

        var match;
        while (match = patt.exec(readStr)) {
            alert(match)
        }

此脚本的输出是两个警报:

警报 1:

Array [ "[Profile0]
Name=Main
IsRelative=1
Path=Profiles/vr10qb8s.default
Default=1", "Profile0", "Default", "1" ]

警报 2:

Array [ "[Profile1]
Name=Clean
IsRelative=1
Path=Profiles/k46wtieb.clean", "Profile1", "Path", "Profiles/k46wtieb.clean" ]

我的问题是,为什么它只捕获每组中的最后一对。

我希望看到的是:

警报 1 应该是(注意 "Name", "Main", "IsRelative", "1", "Path", "Profiles/vr10qb8s.default", )

Array [ "[Profile0]
Name=Main
IsRelative=1
Path=Profiles/vr10qb8s.default
Default=1", "Profile0", "Name", "Main", "IsRelative", "1", "Path", "Profiles/vr10qb8s.default", "Default", "1" ]

警报 2 应该是(注意 "Name", "Clean", "IsRelative", "1", )

Array [ "[Profile1]
Name=Clean
IsRelative=1
Path=Profiles/k46wtieb.clean", "Profile1", "Name", "Clean", "IsRelative", "1", "Path", "Profiles/k46wtieb.clean" ]

最佳答案

遗憾的是,带有量词的组不会为该组生成捕获数组。它也不会随着数量的增加而自动生成捕获组。

  • 对于给定的组号,组的内容会被最后一次捕获覆盖。这就是您只看到最后一对的原因。
  • 我知道的唯一异常(exception)是 .NET,您可以在其中获得包含连续捕获的 CaptureCollection。
  • 为了消除歧义,Perl 和 PCRE 等语言中的分支重置功能允许您在交替的多边使用同一个组——同样,您不会获得多个捕获。

关于javascript - 为什么我的正则表达式模式只捕获最后一对?它应该捕获每场比赛中的所有对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24347366/

相关文章:

php - 如果数组中的数据存在,自动生成 JS 变量 PHP/MySQL

javascript - jQuery 单击事件样式表更改不起作用

regex - 如何查询Matlab结构体中匹配特定模式的变量列表?

javascript - 需要正则表达式来制作 * 粗体之间的文本

regex - 可选的正则表达式捕获组 - 我缺少什么?

javascript - 如何在动画 JavaScript anchor 滚动时编辑 URL 名称?

javascript - Backbone.js 仍在验证失败时设置模型属性

javascript - 点击复制元素的html代码

php - 拆分括号内的字符串

c# - 如何评估 C# 中的自定义括号表达式?