Переместите + внутри скобок, а затем разбейте y на отдельные части. Ниже приведен Perl, но он должен дать вам представление:
#!/usr/bin/perl
use strict;
use warnings;
my $s = "abcbcbcd";
my ($x, $y, $z) = $s =~ /(a)((?:bc)+)(d)/;
my @y = $y =~ /(bc)/g;
print "x is $x\n",
"y is ", join(", ", @y), "\n",
"z is $z\n";
А вот какой-то дерьмовый Javascript, который я взломал вместе (я действительно не знаю Javascript):
<html>
<body>
<script type="text/javascript">
var str = "abcbcbcd";
var matches = str.match(/(a)((?:bc)+)(d)/);
var x = matches[1];
var y = matches[2].match(/(bc)/g);
var z = matches[3];
document.write(
"x is ", x, "<br />",
"y is ", y.join(", "), "<br />",
"z is ", z
);
</script>
</body>
</html>