javascript - 如何从字符串中提取单个电子邮件地址?
问题描述
我需要从这种字符串中提取一个电子邮件地址。
未经授权:您的密码已过期。我们已向 example@gmail.com 发送了重置密码链接。请检查您的电子邮件以获取详细信息
const string = "Unauthorized: Your password has expired. We have sent a reset password link to example@gmail.com. Please check your email for details";
const mailMatch = string.match(/(\S+@[^\s.]+\.{1}[^.]\S+)/);
这种情况下的匹配将是这个`
[0: "example@gmail.com."
1: "example@gmail.com."
groups: undefined
index: 79
input: "Unauthorized: Your password has expired. We have sent a reset password link to example@gmail.com. Please check your email for details"
length: 2]
我不想匹配邮件末尾的点(表示句子的结尾)。如何更改我的正则表达式,以便仅获取example@gmail.com
解决方案
您可以使用
var string = "Unauthorized: Your password has expired. We have sent a reset password link to example@gmail.com. Please check your email for details";
var mailMatch = string.match(/\S+@[^\s.]+\.[^.\s]+/);
console.log(mailMatch); // => Matched text: example@gmail.com
// Or, if you may have any non-whitespace chars and you want to stop at the last
console.log(
"The example@site.co.uk address is not available".match(/\S+@[^\s.]+\.\S+\b/)
); // => Matched text: example@site.co.uk
// Or just
console.log(
"The example@some.site.co.uk address is not available".match(/\S+@\S+\.\S+\b/)
); // => Matched text: example@some.site.co.uk
由于尚不清楚您有一个更通用的示例是什么电子邮件要求
s.match(/\S+@\S+\.\S+\b/)
细节
\S+
- 1+ 非空白字符@
- 一个@
字符\S+
- 1+ 非空白字符\.
- 一个点\S+\b
- 1+ 个以单词边界结尾的非空白字符。
如果您只需要提取看起来有效的电子邮件,这里有一个对著名的电子邮件验证正则表达式稍作修改的解决方案:
var email_rx_extract = /(?:[^<>()[\]\\.,;:\s@"]+(?:\.[^<>()[\]\\.,;:\s@"]+)*|".+")@(?:\[\d{1,3}(?:\.\d{1,3}){3}]|(?:[a-zA-Z0-9-]+\.)+[a-zA-Z]{2,})(?![a-zA-Z])/g;
var s = "The example@some.site.co.uk address is not available\nBad email is example@gmail...........com.";
var results = s.match(email_rx_extract);
console.log(results); // => Only example@some.site.co.uk is found.
推荐阅读
- php - 如何在 laravel 数据库的同一个表中添加 2 个自动增量列
- php - PHP替换HTML表格标签内的数据
- node.js - NodeJS 启动 mongoDB 服务器
- dialogflow-es - 设置上下文时出错...无法读取未定义的属性“输入”
- android - 使用系统证书签署 Apk
- django - solr 服务器在某些记录后停止索引
- go - 将 ListenAndServe 放入 goroutine
- java - Files.isHidden C:\\ 在 Windows 上的 JDK12 和 JDK13 之间更改
- angular - Angular Reactive Form - 编辑模式下的唯一字段验证器
- regex - 正则表达式:如何使用以下参数验证密码