You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写可从不同格式字符串中统一提取邮箱的正则表达式

解决方案

有两种简单的实现方式,都可以统一从同一个位置读取匹配结果:

方案1:单捕获组通用正则(兼容性最好)

核心逻辑是优先匹配尖括号包裹的内容,没有尖括号就匹配整个字符串里的邮箱,所有结果统一从第1个捕获组读取:
正则表达式:
/^(?:.*<)?([^<>\s]+@[^<>\s]+)(?:>)?$/
测试代码:

const emailRegex = /^(?:.*<)?([^<>\s]+@[^<>\s]+)(?:>)?$/;

// 测试用例
const testCases = [
  "torvalds@linux.org",
  "Elon <42069@tesla.com>",
  "Suzzy@Typo.com <suzzy@peppapig.com>"
];

testCases.forEach(item => {
  const result = item.match(emailRegex)?.[1];
  console.log(result);
});

输出结果:

torvalds@linux.org
42069@tesla.com
suzzy@peppapig.com

方案2:命名捕获组(可读性更高)

如果你的运行环境支持ES2018及以上规范,可以用同名命名捕获组,直接从groups.email读取结果,不需要记捕获组序号:
正则表达式:
/^(?:(?<email>[^<>\s]+@[^<>\s]+)|.*<(?<email>[^<>\s]+@[^<>\s]+)>)$/
测试代码:

const emailRegex = /^(?:(?<email>[^<>\s]+@[^<>\s]+)|.*<(?<email>[^<>\s]+@[^<>\s]+)>)$/;

const testCases = [
  "torvalds@linux.org",
  "Elon <42069@tesla.com>",
  "Suzzy@Typo.com <suzzy@peppapig.com>"
];

testCases.forEach(item => {
  const result = item.match(emailRegex)?.groups?.email;
  console.log(result);
});

输出结果和方案1完全一致。

内容的提问来源于stack exchange,提问作者noisy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 09:54:00