That's definitely a strange situation you've got there. The problem has something to do with the quantifier in the regex. When I replace
/^([A-Z]+)$/
with
/^([A-Z]*)$/ (i.e. change the '+' to a '*')
I get...
In if: FOO
In else:
In else:
In if: BAR
In else:
while changing the regex to
/^([A-Z]{2,})$/ results in...
In if: FOO
In else: FOO
In else:
In if: BAR
In else: BA
While experimenting with {0,} {1,} {3,}, etc. it seems like in the non-matching case, $1 contains characters from the previous match and the number of them depends on the value for the minimum quantifier of the regex . I wouldn't try to depend on this behaviour if I were you:-)