javascript regex从字符串中提取电子邮件

68bkxrlz  于 2023-02-02  发布在  Java
关注(0)|答案(8)|浏览(243)

我想知道是否通过使用正则表达式我能够提取电子邮件从以下字符串?
下面的RE模式是.*@.*匹配所有字符串。它可以很好地匹配一些字符串,但不能匹配所有字符串。
我想匹配所有字符串匹配电子邮件模式包括所有域如(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
guykilcj

guykilcj1#

您可以使用regex /([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);
}

脚本执行:运行以查看结果
x一个一个一个一个x一个一个二个x

  • ----更新----
    • 虽然上面代码片段中的正则表达式匹配大多数电子邮件模式,但如果您仍需要匹配99%以上的电子邮件模式,包括边缘大小写(如电子邮件中的"+"),则使用如下所示的正则表达式模式**

脚本执行:运行以查看结果
一个三个三个一个

pod7payv

pod7payv2#

我想补充@Ambrish Pathak的回答,
根据wikipedia,电子邮件地址也可以接受+号

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

会像符咒一样奏效

zvokhttg

zvokhttg3#

[a-zA-Z0-9-_.]+@[a-zA-Z0-9-_.]+为我工作,你可以在这个regex101 saved regex上检查结果。
它实际上只是两个相同的模式由一个@符号分隔。
该模式是以下项的一次或多次出现:

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

如果它错过了一些电子邮件,添加任何丢失的字符到它,它应该做的伎俩。

    • 编辑**

我一开始并没有注意到它,但是当转到regex101 link时,屏幕右上角有一个 * Explanation * 部分,解释正则表达式匹配的内容。

omhiaaxx

omhiaaxx4#

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

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

参见demo / explanation
另外如果你想要,你可以捕获只包含一个特定域名的那些电子邮件 (ie. www.example.com) 和实现那你仅仅需要到替换这\w+\.\w+部分在<domain>之后与你想要的域名.所以,它将象(?<name>[\w.]+)\@(?<domain>outlook.com)(\.\w+)?some-url.com)* and to achieve that you just need to replace the \w+\.\w+ part after <domain> with your desired domain name. so, it would be like (?<name>[\w.]+)\@(?<domain>outlook.com)(\.\w+)?
参见demo / explanation

xzlaal3s

xzlaal3s5#

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

polkgigr6#

这个正则表达式对我不起作用......

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' }
]
fcy6dtqo

fcy6dtqo7#

\W([\w\-\.]+@[\w\-\.]+)+\W

将查找字符串中的所有电子邮件

ercv8c1e

ercv8c1e8#

从我的Angular 使用Python工作得很好。你自己试试吧。

[a-z]+@[a-z]+.[a-z]+

相关问题