g modifier: global. All matches (don't return on first match)
i modifier: insensitive. Case insensitive match (ignores case of [a-zA-Z])
In your case though i is immaterial as you dont capture [a-zA-Z].
For input like !@#$ if g modifier is not there regex will return first match !See here.
If g is there it will return the whole or whatever it can match.See here