在字符串中查找电子邮件

Find e-mails on string

本文关键字:电子邮件 查找 字符串      更新时间:2024-01-14

我几天前问了这个问题:

无法获取JSON对象上的特定值

第一个答案非常完美。现在我需要修改这个正则表达式,以便查找电子邮件。问题是我对正则表达式一无所知,我一直在四处寻找,但似乎无法实现。这是代码:

var m=null
      , result=JSON.stringify(response)
      , re=/"message":"([^"]+)"/g
      , messages=[];
  while( m=re.exec(result) ) {
      messages.push(m[1]);

我的另一个问题解释了所有内容,但基本上,这段代码所做的是获得message":"THIS TEXT"现在,我想弄清楚该文本是否包含电子邮件。

我已经查看了许多javascript regexp示例,发现它相当令人困惑,所以如果你能给我一点解释(或阅读一些东西),说明它为什么会这样做,我真的很感激。

Regexp您正在寻找的是长而丑陋的。RFC标准中的电子邮件地址定义过于复杂和宽松。请参阅维基百科上的"有效电子邮件地址"部分。但是,您可以使用以下简单的regexp:来检查字符串是否像电子邮件

/^.+@.+'..+$/

Regexper

p>有一些非常非常长的正则表达式,可以用于基于RFC标准验证电子邮件。这里有一个基于RFC882验证正则表达式的正则表达式,它既简短又易于理解。

如果你想验证看起来像电子邮件的任何东西,你可以使用这个:

^.+@.+'..+$

但是,这个正则表达式还允许使用空格和多个@符号。所以,你可以使用这个:

^[^@]+@[^@]+'.[^@]+$

但这将允许在名称和TLD中使用特殊字符,因此,这里有一个简短的正则表达式,可以匹配几乎所有的英文电子邮件(以及非英文电子邮件):

^([a-zA-Z0-9'-_'~'!'$'&'''(')'*'+',;':'=]+)'@(.+)'.([a-zA-Z]{2,36})$

此正则表达式将在a-z0符号之前一次或多次匹配字符CCD_2、A-Z0-9-_~!$&'()*+,;:=,将匹配@符号之后的任何字符(现在几乎所有字符都可以用于新的国际域),并且允许CCD_ 22或CCD_。

有些国际域名中没有英文字符,所以如果你有国际观众,最好用.{2,36}代替[a-zA-Z]{2,36}

以下是Regex#1在regex101.com.上的实时预览

以下是Regex#2在regex101.com.上的实时预览

以下是Regex#3在regex101.com上的实时预览。