Personnellement, j'opterais pour une regex moins compliquée :
/\S+@\S+\.\S+/
Bien sûr, c'est moins précis que votre modèle actuel, mais qu'essayez-vous d'accomplir ? Essayez-vous d'attraper les erreurs accidentelles que vos utilisateurs pourraient saisir, ou craignez-vous que vos utilisateurs essaient de saisir des adresses invalides ? Si c'est le premier cas, je choisirais un modèle plus simple. Dans le second cas, une vérification par réponse à un e-mail envoyé à cette adresse pourrait être une meilleure option.
Cependant, si vous souhaitez utiliser votre modèle actuel, il serait (IMO) plus facile à lire (et à maintenir !) en le construisant à partir de sous-modèles plus petits, comme ceci :
var box1 = "([^<>()[\]\\\\.,;:\s@\"]+(\\.[^<>()[\\]\\\\.,;:\s@\"]+)*)";
var box2 = "(\".+\")";
var host1 = "(\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])";
var host2 = "(([a-zA-Z\-0-9]+\\.)+[a-zA-Z]{2,})";
var regex = new RegExp("^(" + box1 + "|" + box2 + ")@(" + host1 + "|" + host2 + ")$");