Я пытаюсь проанализировать следующий формат строки:
<id>:<name>[,<name>]*
В качестве примера рассмотрим 123:test,south-west,best,rest_well
.
Я написал следующее регулярное выражение:
/(\d+):([a-zA-Z0-9_\-]+)(?:,([a-zA-Z0-9_\-]+))*/
Я предполагал, что (?:,([a-zA-Z0-9_\-]+))
захватит необязательные дополнительные имена (south-west, best и rest_well). Однако он фиксирует только фамилию «rest_well».
Распечатанное совпадение:
'123:test,south-west,best,rest_well'.match(/(\d+):([a-zA-Z0-9_\-]+)(?:,([a-zA-Z0-9_\-]+))*/);
> ["123:test,south-west,best,rest_well", "123", "test", "rest_well"]
Что я ожидал:
> ["123:test,south-west,best,rest_well", "123", "test", "south-west", "best", "rest_well"]
Я полагаю, что другие языки на самом деле будут накапливать совпадающие группы, но почему-то это не удается. Возможно, я упускаю какую-то маленькую деталь. Любая помощь приветствуется!