与模式匹配或为空字符串的正则表达式

2022-08-30 05:32:29

我有以下与电子邮件地址格式匹配的正则表达式:

^[\w\.\-]+@([\w\-]+\.)+[a-zA-Z]+$

这用于使用 JavaScript 验证表单。但是,这是一个可选字段。因此,如何更改此正则表达式以匹配电子邮件地址格式或空字符串?

根据我有限的正则表达式知识,我认为匹配一个空字符串,并且意味着“Or”,所以我尝试执行以下操作,但它不起作用:\b|

^[\w\.\-]+@([\w\-]+\.)+[a-zA-Z]+$|\b

答案 1

要匹配或空字符串,请使用pattern

^$|pattern

解释

  • ^并分别是字符串锚点的开头和结尾。$
  • |用于表示替代项,例如 .this|that

引用


\b

\b在大多数风格中是“单词边界”锚点。它是一个零宽度匹配,即一个空字符串,但它只在非常具体的地方匹配这些字符串,即在单词的边界。

即,位于:\b

  • 在连续和(任一顺序)之间:\w\W
    • 即在单词字符和非单词字符之间
  • 在 和 之间^\w
    • 即,在字符串的开头,如果它以\w
  • 在 和 之间\w$
    • 即,在字符串的末尾,如果它以\w

引用


关于使用正则表达式匹配电子邮件地址

根据规格的不同,这并非易事。

相关问题


答案 2

另一种方法是将正则表达式放在非捕获括号中。然后使用限定符使该表达式可选,该限定符将查找未捕获组的 0(即空字符串)或 1 个实例。?

例如:

/(?: some regexp )?/

在你的例子中,正则表达式看起来像这样:

/^(?:[\w\.\-]+@([\w\-]+\.)+[a-zA-Z]+)?$/

无需“或”运算符!|

这是JavaScript正则表达式语法的Mozilla文档。