Unmatched captures remain distinct from empty captures
A successful match can still contain unmatched optional groups. The report serializes those values as null rather than confusing them with an empty string captured by a participating group.
Numbered captures preserve source order and named captures preserve their group names. The enclosing match index and end index use JavaScript's UTF-16 indexing contract, making the report suitable for debugging browser code.