no creo que sea ahi donde este el problema. si comprobamos las cosas por partes, veras que trabaja bien. otra forma de comprobar la expresion es determinar que es lo que esta pareando la expresion. en este ejemplo el alert debe mostrarte el correo electronico. lo unico diferente es que la expresion no tiene anclas (^$) y le he agregado un poco mas de texto.
Código:
alert("el correo electronico [email protected] es un ejemplo de prueba".match(/[0-9a-zA-Z._]+@[0-9a-zA-Z]+.[0-9a-zA-Z.]+/)[0]);