Firstly, when your talking about email addresses at this level, you need to be a lot more specific about the data you are talking about. You seem to be trying to match a single ADDR-SPEC (RFC3696,5322). According to the RFC, the following is an email address:
"hello world" <[email protected]>, !$&*-=^`|~#%'+/?_{}@example.com, "Abc@def"@example.com
Consisting of 3 ADDR-SPECs.
Note that there are lots of local part characters which won't match your regex. Your domain matching is too loose. You've not escaped the '.'s in your regex - which is the only reason it can cope with a domain using more than 2 parts e.g. @mail.something.co.jp
RFC4952 suggests using UTF8 for all SMTP, however internationalized domain names whereas RFC3940 uses punycode for internationalized domain names. When last I dug into this in any depth I found that many MUA's were using punycode for the local part.
The following regex comes close to fully implementing the RFC2822 standard:
/[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/gi
But in practice I've found this worksd for me:
/^[a-z0-9\._%+!$&*=^|~#%'`?{}/\-]+@([a-z0-9\-]+\.){1,}([a-z]{2,6})$/gi
C.