为什么"。"没有陷入正则表达式?

时间:2017-03-02 14:12:45

标签: javascript regex

我希望有一个定期的epxresion,允许检查给出的电子邮件地址是否正确。首先,它将检查特定提供者是否存在,在这种情况下(@test.de) - 这不是问题。但是,允许的电子邮件名称必须仅包含字母或点。所以:.@test.de有效。但是这个具体案例不被接受。我的正则表达式如下所示:

[A-Za-z\.]{1,}\b@test\.de\b

对于所有其他情况,它可以正常工作,但如果是" ."只是在它不适合的@前面。

指出我做错了什么?

1 个答案:

答案 0 :(得分:2)

模式中的第一个单词\b要求@之前必须有单词char。因此,点不能出现在那里,匹配失败。

您需要删除单词边界,使用

[A-Za-z.]+@test\.de\b

请注意,您不需要在字符类中转义一个点,它已经表示一个文字点。

如果您仍想在删除\b后匹配“整个”字词,则可以使用lookbehinds(如果正则表达式引擎支持它们):

(?<!\w)[A-Za-z.]+@test\.de\b

或仅在字符串的空格/开头后匹配:

(?<!\S)[A-Za-z.]+@test\.de\b

如果名称以字母开头,则只使用字边界;如果以字母开头,则使用非字边界:

(?:\b[A-Za-z]|\B\.)[A-Za-z.]*@test\.de\b

请参阅this demo