正则表达式从字符串中提取电子邮件

时间:2017-02-23 05:30:06

标签: regex

我想知道正则表达式是否能够从以下字符串中提取电子邮件?

以下条件是.*@.*与所有字符串匹配。对于某些字符串,我的模式是有效的,但其余部分则不然。

我希望匹配所有匹配电子邮件模式的字符串包括所有域名(some-url.com)或(some-url.co.id)

boleh di kirim ke email saya ekoprasetyo.crb@outlook.com tks...
boleh minta kirim ke db.maulana@gmail.com. 
dee.wien@yahoo.com. .
deninainggolan@yahoo.co.id Senior Quantity Surveyor
Fajar.rohita@hotmail.com, terimakasih bu Cindy Hartanto
firmansyah1404@gmail.com saya mau dong bu cindy
fransiscajw@gmail.com 
Hi Cindy ...pls share the Salary guide to donny_tri_wardono@yahoo.co.id thank a

7 个答案:

答案 0 :(得分:22)

您可以使用正则表达式/([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9_-]+)/创建一个函数,以便从长文本中提取电子邮件ID:

function extractEmails ( text ){
    return text.match(/([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9_-]+)/gi);
    }

脚本运行:运行以查看结果



var text = `boleh di kirim ke email saya ekoprasetyo.crb@outlook.com tks... boleh minta kirim ke db.maulana@gmail.com. dee.wien@yahoo.com. . 
deninainggolan@yahoo.co.id Senior Quantity Surveyor
Fajar.rohita@hotmail.com, terimakasih bu Cindy Hartanto
firmansyah1404@gmail.com saya mau dong bu cindy
fransiscajw@gmail.com 
Hi Cindy ...pls share the Salary guide to donny_tri_wardono@yahoo.co.id thank a`; 

function extractEmails ( text ){
    return text.match(/([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9_-]+)/gi);
    }
     
    $("#emails").text(extractEmails(text));

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<p id="emails"></p>
&#13;
&#13;
&#13;

答案 1 :(得分:4)

[a-zA-Z0-9-_.]+@[a-zA-Z0-9-_.]+为我工作,你可以查看regex101 saved regex上的结果。

它实际上只是由@符号分隔的相同模式的两倍。

该模式是1次或更多次出现:

  • a-z:任何小写字母
  • A-Z:任何大写字母
  • 0-9:任何数字
  • -_.:连字符,下划线或点

如果它遗漏了一些电子邮件,请添加任何丢失的字符,它应该可以解决问题。

修改

我没有先注意到它,但是当转到regex101 link时,屏幕右上角有一个说明部分,说明了什么正则表达式匹配。

答案 2 :(得分:2)

我想添加到@Ambrish Pathak的答案中,

根据wikipedia,电子邮件地址也可以接受+号

([a-zA-Z0-9+._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9_-]+)

将像魅力一样工作

答案 3 :(得分:1)

您可以使用以下 regex 来捕获所有电子邮件地址。

(?<name>[\w.]+)\@(?<domain>\w+\.\w+)(\.\w+)?

请参阅demo / explanation

另外,如果您愿意,您只能捕获包含特定域名(即some-url.com)的电子邮件,并且要实现这一点,您只需要替换{{1}在\w+\.\w+之后添加您想要的域名。所以,它就像<domain>

请参阅demo / explanation

答案 4 :(得分:1)

\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}+\.[A-Z]{2,}

答案 5 :(得分:0)

希望这会奏效。

[\w\.]+\@[\w]+(?:\.[\w]{3}|\.[\w]{2}\.[\w]{2})\b

Regex Demo

答案 6 :(得分:0)

嗨,这个正则表达式不适用于我……

       let items1 = document.querySelectorAll('h1');
                items1.forEach((item) => {
                    let pattern = (/([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9_-]+)/gi)
                    if (item.innerHTML.match(pattern)) {
                        results.push({
                            emailId: item.innerHTML
                        });
                    }
                });

这是我从中获取文本的标签...只是一个

 <h1>"dasd xyz@gmail.com asdas asdsad asdasd"</h1>

这是我得到的对象输出。

[
  { emailId: 'sadasdsa br@gmail.com' },
  { emailId: 'sadasd br2@gmail.com' },
  { emailId: '"asgdb@gmail.com"' },
  { emailId: '"dasd xyz@gmail.com asdas"' },
  { emailId: 'asgdb@gmail.com' }
]