单行电子邮件正则表达式工作,但多行版本没有

时间:2016-11-24 06:24:02

标签: javascript regex

我找到了this正则表达式的电子邮件。我试着把它变成一个多行版本。但是在我这样做之后它停止工作:

const emailOne = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/

const email = RegExp(
  /* eslint-disable */
  '^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|' +
  '(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|' +
  '(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$'
  /* eslint-enable */
)

emailOne.test('abc@gmail.com')

emailTwo.test('abc@gmail.com')

emailOne返回trueemailTwo返回false。为什么会是这个原因?

修改

我意识到RegExp会修改原始正则表达式(打破它):

// regex created by RegExp
/^(([^<>()[]\.,;:s@"]+(.[^<>()[]\.,;:s@"]+)*)|(".+"))@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}])|(([a-zA-Z-0-9]+.)+[a-zA-Z]{2,}))$/

// emailOne
/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/

1 个答案:

答案 0 :(得分:2)

您的第一个正则表达式是使用正则表达式指定的。你的第二个用字符串指定,你忽略了用另一个反斜杠转义反斜杠。 \\