Surely you can't have it both ways? Either you want to match one lot of "pat" or several lots of "pat". You match what you want and do what you want with it, no further parsing required. You use a while (/(pat)/g) construct to get all the occurences of "pat" into $1 in sequence if that is what you want.
My example of matching attributes in an HTML tag is a prime example. You either have to break it down into many matches, or match them all at once and do further parsing to split them up.
This new technique matches them all at once, and get them into different variables. And it can be done for really complex regexes. So I can have it both ways.
But this is not the intended use. The intended use is for the debugger.