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

JavaScript正则表达式拆分邮件列表为基础组件的问题

解析带复杂格式的邮箱列表字符串

看起来你卡在了处理带引号且内部含逗号的邮箱条目上——直接用逗号分割肯定不行,因为引号里的逗号是显示名的一部分。这里给你一个用正则表达式解决的方案,能完美处理你列出的所有格式:

实现代码

var emailList = 'peter@pan.com, lucky <jack@pot.com>, "William Tell" <billy@tell.com>, "John Rambo, III" <johnny@rambo.com>, "there, might, be, several, commas inside the quotes" <multiple@commas.com>, "yes, this is also a valid email address, can you believe" <yes@this@is@valid.com>';

// 匹配所有合法邮箱条目的正则表达式
const emailEntryRegex = /"([^"]+)"\s*<([^>]+)>|([^,<]+)(?:\s*<([^>]+)>)?/g;
let matchResult;
const parsedEmailList = [];

// 循环匹配每个邮箱条目
while ((matchResult = emailEntryRegex.exec(emailList)) !== null) {
  let displayName, emailAddress;

  // 处理带双引号的显示名场景(内部可包含逗号)
  if (matchResult[1]) {
    displayName = matchResult[1].trim();
    emailAddress = matchResult[2].trim();
  } else {
    // 处理不带引号的场景:纯邮箱 或 普通显示名+邮箱
    if (matchResult[4]) {
      displayName = matchResult[3].trim();
      emailAddress = matchResult[4].trim();
    } else {
      displayName = null; // 无显示名的纯邮箱
      emailAddress = matchResult[3].trim();
    }
  }

  parsedEmailList.push({ displayName, emailAddress });
}

// 输出解析结果
console.log(parsedEmailList);

代码说明

  1. 正则表达式逻辑:
    • 第一部分 "([^"]+)"\s*<([^>]+)>:专门匹配带双引号的显示名(内部允许任意字符除了双引号),以及后面紧跟的<邮箱地址>,捕获显示名和邮箱地址。
    • 第二部分 ([^,<]+)(?:\s*<([^>]+)>)?:匹配两种情况:
      • 纯邮箱地址(没有显示名,格式符合[^,<]+,即不含逗号和左尖括号)
      • 不带引号的显示名(不含逗号和左尖括号)加<邮箱地址>的组合
  2. 循环匹配:通过exec()循环遍历整个字符串,把每个匹配到的条目解析成包含displayName(显示名,可为null)和emailAddress(邮箱地址)的对象,存入数组。

测试结果

运行代码后,parsedEmailList会得到如下结构的数组(示例前几项):

[
  { displayName: null, emailAddress: 'peter@pan.com' },
  { displayName: 'lucky', emailAddress: 'jack@pot.com' },
  { displayName: 'William Tell', emailAddress: 'billy@tell.com' },
  { displayName: 'John Rambo, III', emailAddress: 'johnny@rambo.com' },
  // ... 剩余条目
]

这个方案能完美处理你提到的所有边缘情况,包括显示名内有多个逗号、带特殊格式的邮箱地址等。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:48:09