正则表达式 (Javascript) 用于解析带有 firstname.lastname.randomnumber@email.com 的电子邮件

问题描述

我已经搜索了所有关于此的其他主题,但我的解析格式有一个独特的方面,我无法克服。我正在尝试使用标准格式解析电子邮件地址,如下所示 - firstname.lastname.#####@email.com ie 'john.smith.12345@email.com'>

我想返回数字序列之前的任何字母字符 - 'john smith'(或者 .12345 之前的所有名字,以防人们有多个名字)。

现在,我已经计算出 (^[A-Za-z]+\.+[A-Za-z]+) 的正则表达式,但是返回 'john.smith' 这不是世界末日,因为我可以拆分它。

任何帮助将不胜感激。

解决方法

点击下面的代码块试试看。

如果您在数字前只有两个或三个点分隔的名称,您可以对组替代项进行硬编码:

(?:([A-Za-z]+)\.([A-Za-z]+)|([A-Za-z]+)\.([A-Za-z]+)\.([A-Za-z]+))\.\d+@[^\s@]+

这里我们使用非捕获组来包含备选方案。

对于一个、两个或三个点分隔的名称,模式是相似的(虽然有点混乱)。


另一种方法是用可选的非捕获组包装前面的一些点 + 捕获组部分。

([A-Za-z]+)\.([A-Za-z]+)(?:\.([A-Za-z]+))?\.\d+@[^\s@]+

这样可以更简洁地表达 1-3 个点分隔的名称:

([A-Za-z]+)(?:\.([A-Za-z]+))?(?:\.([A-Za-z]+))?\.\d+@[^\s@]+