正则表达式结果包含额外的匹配/组,仅包含一个返回值

问题描述 投票:0回答:2

我想匹配 startend 之间的所有内容,给出以下字符串:

const test = `this is the start
a
b
c
e
f
end
g
h
`;

我有以下正则表达式

const output = test.match(/start((.|\n)*)end/m);

不,

output[0]
包含匹配的整个字符串(带有开始和结束)
output[1]
是比赛(开始和结束之间的所有内容)
output[2]
只是一个回报( )

演示

我不明白的是第二个匹配/组(输出2)来自哪里。艾米的建议?

javascript regex regex-group
2个回答
0
投票

正则表达式的这一部分:

((.|\n)*)
创建两个捕获组。外部组收集与内部
*
组匹配的所有匹配的“任何”字符。内部组将包含最后一个匹配的单个字符。

请注意,您可能最好使用稍微不同的正则表达式,以避免在回溯接管之前在组中收集太多字符的奇怪效果。


0
投票

正如 Pointy 提到的,你有两个捕获组。

如果您使用命名捕获组,这将使代码更易于编写和理解:

const test = `this is the start
a
b
c
e
f
end
g
h
`;

console.log(test.match(/start(?<between>(.|\n)*)end/m).groups.between)

© www.soinside.com 2019 - 2024. All rights reserved.