【问题标题】:Extract email address from string从字符串中提取电子邮件地址
【发布时间】:2017-10-10 07:43:42
【问题描述】:

我有一个这样的字符串:

Francesco Renga <francesco_renga-001@gmail.com>

我只需要提取电子邮件,即 francesco_renga-001@gmail.com。

如何在 nodejs/javascript 中以“优雅”的方式做到这一点?

【问题讨论】:

  • 你用“正则表达式”标记了这个问题,这已经是你问题的答案:使用正则表达式。
  • @Protectator 有什么帮助吗?我实际上正在学习如何使用正则表达式,但没有为类似的情况找到一个好的解决方案。
  • 我编写了一个库,它抽象了从文本中提取电子邮件的逻辑。 github.com/gajus/extract-email-address

标签: javascript regex string


【解决方案1】:

使用正则表达式,如果您的字符串模式始终为Some text&lt;email&gt;Some text&lt;email&gt;, Some text&lt;email&gt; &lt;email&gt;,您可以使用这个简单的&lt;(.*?)&gt;

Demo

其他解决方案

使用正向前瞻:[^&lt;]+(?=&gt;),这是一个 sn-p 和一个 demo

var text = "Francesco Renga <francesco_renga-001@gmail.com>, Marty McFly <mmcfly@gmail.com> Marty McFly <mmcfly@gmail.com> <mmcfly2@gmail.com>";
var re = /[^< ]+(?=>)/g;

text.match(re).forEach(function(email) {
  console.log(email);
});

说明

[^&lt;]+ 匹配除 &lt; 之外的任何内容,在一次和无限次之间

(?=&gt;) 后跟 &gt;

简单,不需要任何组。

【讨论】:

  • 非常感谢!我正在寻找这个! (为什么人们把 -1 放在我的问题上?)
  • 您的问题被赞成 1 次,被反对 2 次。大多数情况下,当问题不清楚或问题可以更容易解决时,例如使用第三方模块在字符串中进行电子邮件解析。
【解决方案2】:

这是一个简单的例子,展示了如何在 JavaScript 中使用正则表达式:

var string = "Francesco Renga <francesco_renga-001@gmail.com>"; // Your string containing
var regex = /<(.*)>/g; // The actual regex
var matches = regex.exec(string);
console.log(matches[1]);

这是正则表达式/&lt;(.*)&gt;/的分解:

  • // 必须定义正则表达式
  • &lt;&gt; 只匹配字符串中的两个 &lt;&gt;
  • () 括号“捕获”您正在寻找的内容。在这里,他们得到了里面的邮件地址。
  • .*. 表示“任意字符”,* 表示“任意次数”。组合起来表示“任意字符任意次数”,即在&lt;&gt; 内部,即对应邮件所在的地方。

【讨论】:

  • 如果字符串包含多个,例如"Francesco Renga &lt;francesco_renga-001@gmail.com&gt;, Marty McFly &lt;mmcfly@gmail.com&gt;",这将不起作用
猜你喜欢
  • 1970-01-01
  • 2019-12-26
  • 2013-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-12
  • 1970-01-01
  • 2023-03-31
相关资源
最近更新 更多