为什么我的正则表达式模式只捕获最后一对?它应该捕获每个匹配中的所有对
Why is my regex pattern capturing only final pair? It should capture all pairs in each match
我的问题是:为什么我的正则表达式模式只捕获最后一对?它应该捕获每个匹配中的所有对。
这里有一个字符串:
[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等语言中的分支重置功能允许您在一个选项的多个方面使用相同的组——同样,您不会获得多个捕获。
相关文章:
- 正则表达式匹配模式或匹配其他所有内容 - 匹配优先级问题
- 模仿负查找以匹配JavaScript正则表达式中没有紧跟特定字符的模式
- 我应该使用什么正则表达式来验证数字模式
- youtube视频的正则表达式匹配模式可以以非贪婪的方式完成吗
- _water_glass的javascript正则表达式模式
- 谷歌浏览器模式正则表达式在使用setCustomValidity动态创建表单时不起作用
- 需要正则表达式模式的帮助
- 正则表达式根据模式替换所有匹配项
- 使用正则表达式查找字符模式
- 正则表达式模式与各种端点匹配
- 带有模式的正则表达式字符串
- JavaScript 中 URL 的正则表达式模式
- Java 与 Javascript 中的正则表达式模式
- 输入元素模式属性的Javascript正则表达式在reFiddle上有效,但在页面上无效
- 将Javascript正则表达式模式转换为C++std::regex的规则
- 如何从字符串构造正则表达式模式
- 城市和州正则表达式模式
- Javascript正则表达式:在同一模式中混合匹配和不匹配
- 设置自定义HTML5有效性消息属性忽略模式正则表达式
- 使用作用域数据的Angular模式正则表达式验证