The (^1|2) matches 1 at the start of the string and 2 anywhere in a string. Similarly, (10|12|14|16$) matches 10, 12 and 14 anywhere inside a string and 16 at the end of the string.
You need to rearrange the anchors:
/^[12](?:[RLXYB]|EURO)(?:10|12|14|16)$/
See the regex graph:

Details
- ^- start of string
- [12]-- 1or- 2
- (?:[RLXYB]|EURO)-- R,- L,- X,- Y,- Bor- EURO
- (?:10|12|14|16)-- 10,- 12,- 14or- 16
- $- end of string
NOTE: If you use ==~ operator in Groovy, you do not need anchors at all because ==~ requires a full string match:
println("1EURO16" ==~ /[12](?:[RLXYB]|EURO)(?:10|12|14|16)/) // => true
println("1EURO19" ==~ /[12](?:[RLXYB]|EURO)(?:10|12|14|16)/) // => false
See the Groovy demo.