用于将电子邮件列表拆分为基本组件的RegExp(JavaScript)
我几乎可以让它工作了,但还不够 我有一个JavaScript字符串,其中包含一个电子邮件列表,每个电子邮件的格式都不同(没有换行符,为便于阅读而编辑): 在这一点上,我应该有一个这样的数组(没有换行符,为了可读性而编辑): 为此,我将使用以下正则表达式:用于将电子邮件列表拆分为基本组件的RegExp(JavaScript),javascript,regex,split,Javascript,Regex,Split,我几乎可以让它工作了,但还不够 我有一个JavaScript字符串,其中包含一个电子邮件列表,每个电子邮件的格式都不同(没有换行符,为便于阅读而编辑): 在这一点上,我应该有一个这样的数组(没有换行符,为了可读性而编辑): 为此,我将使用以下正则表达式: var firstWord = element.match('/"?(\w*),? .*"?/ig')[1]; 这很有效!!:-) 这很有效!!:-) var email=element.match('/|(^[^])/ig')[1];
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})>?,?
我强烈建议不要隐藏内置的数组对象如果它们不是一个单词,全名总是用双引号括起来?@CertainPerformance Good point!!我从来没有这样做过,代码中的变量名为var-Array=
,但它太长了,不易辨认,我缩短了它,留下了stringArray
糟糕!谢谢@wp78de!!这个方法奏效了。我做了一些修改以满足我的需要:谢谢Matt.G!我修改了以更好地解析电子邮件,因为您的解决方案依赖于特定数量的@出现。基本上,我想解析这样的电子邮件地址:part1@part2.part3part1=最后一个之前的任何内容@part2=la之间的任何内容st@and last.part3=最后一个之后的任何内容。因此我将您非常出色的regexp修改为:Array
(?:(?:“?((\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'}