It seems IE11 cannot handle interleaving where the first branch is empty. It:
(|[A-WY-Z0-9][A-Z0-9]{2}|X{3})
... should be equivalent to this:
((?:[A-WY-Z0-9][A-Z0-9]{2}|X{3})??)
... the value of [A-WY-Z0-9][A-Z0-9]{2} or X{3} or nothing, while "nothing" is not the first (or preferred) option.
I recommend not using the "or nothing" idiom, even with an empty branch at the end (which seems to work in IE11). This is not very common, and I think that an extra group will do better with your intentions.
source share