用于将电子邮件列表拆分为基本组件的RegExp(JavaScript)

用于将电子邮件列表拆分为基本组件的RegExp(JavaScript),javascript,regex,split,Javascript,Regex,Split,我几乎可以让它工作了,但还不够 我有一个JavaScript字符串,其中包含一个电子邮件列表,每个电子邮件的格式都不同(没有换行符,为便于阅读而编辑): 在这一点上,我应该有一个这样的数组(没有换行符,为了可读性而编辑): 为此,我将使用以下正则表达式: var firstWord = element.match('/"?(\w*),? .*"?/ig')[1]; 这很有效!!:-) 这很有效!!:-) var email=element.match('/|(^[^])/ig')[1];

我几乎可以让它工作了,但还不够

我有一个JavaScript字符串,其中包含一个电子邮件列表,每个电子邮件的格式都不同(没有换行符,为便于阅读而编辑):

在这一点上,我应该有一个这样的数组(没有换行符,为了可读性而编辑):

为此,我将使用以下正则表达式:

var firstWord = element.match('/"?(\w*),? .*"?/ig')[1]; 
这很有效!!:-)

这很有效!!:-)

var email=element.match('/|(^[^])/ig')[1];
令人惊讶的是,这是有效的!!:-)但我几乎可以肯定它可以变得更优雅

值得一提的是,电子邮件被认为是经过验证的

因此,我需要一些帮助来完成步骤1和3。如果第3步中的任何工作regexp可以简化或变得更优雅,我将从中学习

这不是目标,但如果你想出了一个神奇的正则表达式,可以像我需要的那样拆分电子邮件,那么我可以保证你一定会让我大吃一惊,让我觉得自己很渺小,因为我缺乏正则表达式知识!!!:-)


谢谢

您可以用逗号拆分字符串,但不包括括在引号中的字符串,如:

这将允许您摆脱步骤1和2

关于步骤3中的非功能模式:

不起作用:捕获尾随“


  • :首先匹配平衡引号,或者匹配前面的所有内容
    我相信您应该能够使用正则表达式获得预期的最终结果:

    (?:(?:"?((\w+)\b.*\b)"?)\s)?<?(([\w@]*)@(\w*)\.[a-zA-Z]{2,3})>?,?
    

    var-Array=
    我强烈建议不要隐藏内置的数组对象如果它们不是一个单词,全名总是用双引号括起来?@CertainPerformance Good point!!我从来没有这样做过,代码中的变量名为
    stringArray
    ,但它太长了,不易辨认,我缩短了它,留下了
    Array
    糟糕!谢谢@wp78de!!这个方法奏效了。我做了一些修改以满足我的需要:谢谢Matt.G!我修改了以更好地解析电子邮件,因为您的解决方案依赖于特定数量的@出现。基本上,我想解析这样的电子邮件地址:part1@part2.part3part1=最后一个之前的任何内容@part2=la之间的任何内容st@and last.part3=最后一个之后的任何内容。因此我将您非常出色的regexp修改为:
    (?:(?:“?((\w+)\b.*\b)”?)\s?(?:(?:我发现这非常合适:除了我使用的是JavaScript而不是Perl…:-)
    
    Array[0] = 'peter@pan.com'
    Array[1] = 'lucky
                <jack@pot.com>'
    Array[2] = '"William Tell"
                <billy@tell.com>'
    Array[3] = '"John Rambo, III"
                <johnny@rambo.com>'
    Array[4] = '"there, might, be, several, commas inside the quotes
                <multiple@commas.com>'
    Array[5] = '"yes, this is also a valid email address, can you believe"
                <yes@this@is@valid.com>'
    
    Array[0] = {fullName: '',
                firstWord: '', localPart: 'peter', company: 'pan', 
                email: 'peter@pan.com'}
    Array[1] = {fullName: 'lucky',
                firstWord: 'lucky', localPart: 'jack', company: 'pot', 
                email: 'jack@pot.com'};
    Array[2] = {fullName: 'William Tell',
                firstWord: 'William', localPart: 'billy', company: 'tell',
                email: 'billy@tell.com'};
    Array[3] = {fullName: 'John Rambo, III',
                firstWord: 'John', localPart: 'johnny', company: 'rambo',
                email: 'johnny@rambo.com'};
    Array[4] = {fullName: 'there, might, be, several, commas inside the quotes', 
                firstWord: 'there', localPart: 'multiple', company: 'commas',
                email: 'multiple@commas.com'};
    Array[5] = {fullName: 'yes, this is also a valid email address, can you believe', 
                firstWord: 'yes', localPart: 'yes@this@is', company: 'valid',
                email: 'yes@this@is@valid.com'};
    
    var firstWord = element.match('/"?(\w*),? .*"?/ig')[1]; 
    
    var fullName = element.match('/"?(.*)"? </ig')[1]; 
    
    var localpart = element.match('/<(.*)@/ig')[1];
    
    var company = element.match('/@(.*)\./ig')[1];
    
    var email = element.match('/<(.*@.*)>|(^[^<].*[^>])/ig')[1];
    
    ,(?=(?:[^'"]|'[^']*'|"[^"]*")*$)
    
    (?:(?:"?((\w+)\b.*\b)"?)\s)?<?(([\w@]*)@(\w*)\.[a-zA-Z]{2,3})>?,?
    
    { fullName:'\1', firstWord:'\2', localPart:'\4', company:'\5', email:'\3'}