对于 Simple Java Mail我正在尝试处理一种有点自由格式的分隔电子邮件地址。请注意,我特别不验证,只是从地址列表中获取地址。对于此用例,可以假定地址是有效的。
这是一个有效输入的例子:
"name@domain.com,Sixpack, Joe 1 <name@domain.com>, Sixpack, Joe 2 <name@domain.com> ;Sixpack, Joe, 3<name@domain.com> , nameFoo@domain.com,nameBar@domain.com;nameBaz@domain.com;"
因此有两种基本形式“name@domain.com”和“Joe Sixpack”,它们可以出现在逗号/分号分隔的字符串中,忽略空格填充。问题是名称可以包含定界符作为有效字符。
以下数组显示了所需的数据(尾随空格或定界符不是大问题):
["name@domain.com",
"Sixpack, Joe 1 <name@domain.com>",
"Sixpack, Joe 2 <name@domain.com>",
"Sixpack, Joe, 3<name@domain.com>",
"nameFoo@domain.com",
"nameBar@domain.com",
"nameBaz@domain.com"]
我想不出一个干净的方法来处理这个问题。关于如何可靠地识别逗号是名称的一部分还是分隔符,有什么建议吗?
最终解决方案(已接受答案的变体):
var string = "name@domain.com,Sixpack, Joe 1 <name@domain.com>, Sixpack, Joe 2 <name@domain.com> ;Sixpack, Joe, 3<name@domain.com> , nameFoo@domain.com,nameBar@domain.com;nameBaz@domain.com;"
// recognize value tails and replace the delimiters there, disambiguating delimiters
const result = string
.replace(/(@.*?>?)\s*[,;]/g, "$1<|>")
.replace(/<\|>$/,"") // remove trailing delimiter
.split(/\s*<\|>\s*/) // split on delimiter including surround space
console.log(result)
或者在 Java 中:
public static String[] extractEmailAddresses(String emailAddressList) {
return emailAddressList
.replaceAll("(@.*?>?)\\s*[,;]", "$1<|>")
.replaceAll("<\\|>$", "")
.split("\\s*<\\|>\\s*");
}
最佳答案
由于您没有验证,我假设电子邮件地址有效。
基于这个假设,我将查找后跟 ;
的电子邮件地址。或 ,
这样我就知道它是有效的。
var string = "name@domain.com,Sixpack, Joe 1 <name@domain.com>, Sixpack, Joe 2 <name@domain.com> ;Sixpack, Joe, 3<name@domain.com> , nameFoo@domain.com,nameBar@domain.com;nameBaz@domain.com;"
const result = string.match(/(.*?@.*?\..*?)[,;]/g)
console.log(result)
关于java - 如何标记化、扫描或拆分这串电子邮件地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45825426/