Sorry, but your code doesn't work as expected. At least, not how you have it written.

Code:
alias retest2 {
  var %s = $1-
  if ($regex(re1,%s,/(?:((\d\d?)((?1)|\:|\s|){3})|([a-z].*?)(?=\s0|$))/gi)) {
    echo -a (Before): $len($regml(re1,1)) $regml(re1,1)
    echo -a (Match1): $len($regml(re1,2)) $regml(re1,2)
    echo -a (Middle): $len($regml(re1,5)) $regml(re1,5) 
    echo -a (Match2): $len($regml(re1,6)) $regml(re1,6) 
    echo -a (Ending): $len($regml(re1,9)) $regml(re1,9)
  }
  else { echo -a No Match }
}


Works: /retest2 beginning text 00:0:00 middle text 00:00:00 end text
Works: /retest2 beginning text 00:0:00 middle text 00:00:00
Fails: /retest2 beginning text 00:0:00 00:00:00 end text
Fails: /retest2 00:0:00 middle text 00:00:00 end text
Fails: /retest2 00:0:00 00:00:00
Fails: /retest2 beginning text 00:0:00 middle text end text
Fails: /retest2 beginning text middle text end text
Fails: /retest2 beginning text 000:0:00 middle text 00:00:00 end text
Fails: /retest2 beginning text 00:0:000 middle text 00:00:00 end text

(Note: "fails" means the results aren't what the OP requested, or can use reliably.)

Since the match is this:
<optional text> <pattern> <optional text> <pattern> <optional text>
I tried using another group to repeat the [<optional text> <pattern>] part, but the $regml values weren't populated properly.

-genius_at_work