只使用正则表达式查找不是电子邮件地址的所有内容

时间:2012-10-16 13:42:27

标签: javascript regex email

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

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

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

我想修改此正则表达式以查找反向 - 除了任何字符串中的电子邮件地址之外的所有内容。


示例1:

asdasd

示例2:

123@asd.com sda


注意:我希望在以下行中获得status == true

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

我只能改变模式,没有别的!

5 个答案:

答案 0 :(得分:2)

官方标准称为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);

检查this demo

答案 1 :(得分:0)

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

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

请注意,我删除了前导^并尾随$。这些是强制模式匹配整个字符串(^是行的开头,$是行尾。)

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

它的工作

答案 4 :(得分:-1)

根据您的修改,您真正想要的是

var status = ! myString.match(email pattern)

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