Time to round up this discussion I finally understand that this has to be postponed for a bit.
First I'm going to implement matching multiple patterns at once, i.e. the following:
```d
assert("22 days".matchFirst(`\[a-z]+', `\d+`) == 2); 
```
That is a match is implicitly convertible to int and bool.
This will return number 1-n on success indicating which pattern matched (and staying compatible with 1 pattern case). 0 - still no match. Captures returned are ones of the matched pattern.

Then on top of this regexSwitch gets both cleaner semantic and easier code. How does it sound?