Japt v2, 21 2020 19 bytes
Saved 1 byte2 bytes thanks to @Shaggy
e/\[.([^[]*?)](./@YpZ
Test it online!Test it online!
e
is recursive replace, which makes one replacement at a time until there are no more matches. In this case, matches of the regex /\[([^[]*?)](\d)/g
are replaced with with <inner text> repeated <digit> times until there are no more matches.
According to what I have planned (here), this regex should eventually be at least 33 2 bytes shorter:
‹[“⁽[»₋”]“.›