繁体   English   中英

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

[英]Find everything that's not an email address using only regex

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

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

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

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


###Example 1: asdasd

###示例 2:123@asd.com sda


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

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

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

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

检查这个演示

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

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

请注意,我去掉了前导^和尾随$ 这些强制模式匹配整个字符串( ^是行首, $是行尾)。

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

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

它的工作

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

var status = ! myString.match(email pattern)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM