为什么我的正则表达式模式只捕获最后一对?它应该捕获每个匹配中的所有对

Why is my regex pattern capturing only final pair? It should capture all pairs in each match

本文关键字:模式 正则表达式 我的 最后 为什么      更新时间:2023-09-26

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

这里有一个字符串:

[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" ]

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

我希望看到的是:

alert 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" ]

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

  • 对于给定的组号,该组的内容将被最后一次捕获覆盖。这就是为什么你只看到最后一对。
  • 我知道的唯一例外是。net,在那里你得到一个连续捕获的CaptureCollection。
  • 为了消除歧义,Perl和PCRE等语言中的分支重置功能允许您在一个选项的多个方面使用相同的组——同样,您不会获得多个捕获。