1

我需要在不是电子邮件地址的字符串中找到所有内容。

这是我如何查找电子邮件地址的版本。

^[a-zA-Z0-9_.-]+@[a-zA-Z0-9][a-zA-Z0-9-.]+\.([a-zA-Z]{2,6})$

我想修改这个正则表达式来找到相反的——除了任何字符串中的电子邮件地址之外的所有内容。


###示例1: asdasd

###示例 2:123@asd.comsda


注意: 我想进入status == true以下行:

var status = myString.match(pattern matches everything that is not an email address);

###我只能换花样,没有别的!

4

5 回答 5

3

官方标准称为RFC 2822。电子邮件地址的正则表达式模式是:

(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])

更实际的 RFC 2822 实现(如果我们省略使用双引号和方括号的语法),它仍然匹配当今实际使用的所有电子邮件地址的 99.99%,它是:

[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?

要从myString使用 JavaScript 代码中获取不匹配的“单词”列表:

var status = myString.match(/(?:\s|^)(?![a-z0-9!#$%&'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+\/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)\S+\b(?=\s|$)/ig);

检查这个演示

于 2012-10-16T13:51:45.360 回答
0

您可以使用空字符串调用replace,以删除与您的模式匹配的电子邮件实例:

var noEmails = stringWithEmails.replace(/[a-zA-Z0-9_.-]+@[a-zA-Z0-9][a-zA-Z0-9-.]+\.([a-zA-Z]{2,6})/g, '');

请注意,我取出了前导^和尾随$。这些迫使模式匹配整个字符串(^是行首,$是行尾)。

于 2012-10-16T13:46:23.943 回答
0
var result=myString.replace('[a-zA-Z0-9_.-]+@[a-zA-Z0-9][a-zA-Z0-9-.]+\.([a-zA-Z]{2,6})', '');
于 2012-10-16T13:50:33.427 回答
0

string.replace(/[/[a-zA-Z0-9_.-]+@[a-zA-Z0-9][a-zA-Z0-9-.]+.([a-zA-Z] {2,6})]*/gi, '');

它的工作

于 2012-10-16T13:58:06.140 回答
-1

根据您的编辑,您真正想要的是

var status = ! myString.match(email pattern)

也就是说,与警卫一起使用您的电子邮件模式(或 Ωmega 发布的巨型东西)。这将匹配只有电子邮件地址的所有内容。这与你想要的完全相反,所以反转布尔值,你就完成了。

于 2012-10-16T14:16:25.403 回答