Javascript 如何在正则表达式中表示包含命名组的列表?

Javascript 如何在正则表达式中表示包含命名组的列表?,javascript,arrays,regex,typescript,Javascript,Arrays,Regex,Typescript,我目前有以下正则表达式: P:(?<ParentName>[A-Z,a-z,0-9,-,_]+)-(?<ParentAge>[A-Z,a-z,0-9,-,_]+) C:(?<Child>[A-Z,a-z,0-9,-,_]+) 但是,我希望能够表达一个与以下内容匹配的正则表达式: P:Jack-35 C:John C:Marie 我尝试在第二部分加上[]+: P:(?<ParentName>[A-Z,a-z,0-9,-,_]+)-(?<Pa

我目前有以下正则表达式:

P:(?<ParentName>[A-Z,a-z,0-9,-,_]+)-(?<ParentAge>[A-Z,a-z,0-9,-,_]+)
C:(?<Child>[A-Z,a-z,0-9,-,_]+)
但是,我希望能够表达一个与以下内容匹配的正则表达式:

P:Jack-35
C:John
C:Marie
我尝试在第二部分加上[]+:

P:(?<ParentName>[A-Z,a-z,0-9,-,_]+)-(?<ParentAge>[A-Z,a-z,0-9,-,_]+)
[C:(?<Child>[A-Z,a-z,0-9,-,_]+)]+
P:(?[A-Z,A-Z,0-9,-,]+)-(?[A-Z,A-Z,0-9,-,]+)
[C:(?[A-Z,A-Z,0-9,-,]+)]+
但是,这不起作用,并为最后一个括号提供一个错误:“不匹配的括号”)

有人知道我怎么表达这个吗

谢谢大家!

更新 问题似乎出在[]里面[]。 仅适用于1“C:…”行的工作正则表达式:

P:(?[A-Za-z0-9-!]+)-(?[A-Za-z0-9-!]+)
C:[A-Za-z0-9-33;]+\ n
不适用于多个“C:..”行的正则表达式:

P:(?[A-Za-z0-9-!]+)-(?[A-Za-z0-9-!]+)
[C:[A-Za-z0-9-\]+\n]+

第一个[第二行与第一行匹配],而它应该是第二个]。

要在
Child
组中获取C:John和C:Marie,您可以在Child组中捕获一个重复组:

(?<Child>(?:C:[A-Za-z0-9,_]+(?:\s|$))+)


请注意,可以将更新到
[A-Za-z0-9,]+
,您可以在其中一次列出每个字符。

JavaScript不支持命名组。@Pointy ECMAScript 2018兼容的JS正则表达式支持。@WiktorStribiżew是的,我记得:)但是它不被广泛支持谢谢!但是命名组可以工作;)。它只会在试图在列表中表达它们时出现问题,
[]
子表达式中的逗号对我来说似乎很奇怪;分隔字符范围不需要逗号,逗号将作为允许的字符集的一部分。
P:(?<ParentName>[A-Za-z0-9-_]+)-(?<ParentAge>[A-Za-z0-9-_]+)
C:[A-Za-z0-9-_]+\n
P:(?<ParentName>[A-Za-z0-9-_]+)-(?<ParentAge>[A-Za-z0-9-_]+)
[C:[A-Za-z0-9-_]+\n]+
(?<Child>(?:C:[A-Za-z0-9,_]+(?:\s|$))+)
P:(?<ParentName>[A-Za-z0-9,_]+)-(?<ParentAge>[A-Za-z0-9,_]+)\s*(?<Child>(?:C:[A-Za-z0-9,_]+(?:\s|$))+)