The only way not to capture something is using look-around assertions:
(?<=123-)((apple|banana)(?=-456)|(?=456))
Because even with non-capturing groups (?:…) the whole regular expression captures their matched contents. But this regular expression matches only apple or banana if it’s preceded by 123- and followed by -456, or it matches the empty string if it’s preceded by 123- and followed by 456.
| Lookaround | Name | What it Does |
|---|---|---|
| (?=foo) | Lookahead | Asserts that what immediately FOLLOWS the current position in the string is foo |
| (?<=foo) | Lookbehind | Asserts that what immediately PRECEDES the current position in the string is foo |
| (?!foo) | Negative Lookahead | Asserts that what immediately FOLLOWS the current position in the string is NOT foo |
| (?<!foo) | Negative Lookbehind | Asserts that what immediately PRECEDES the current position in the string is NOT foo |