Javascript 为什么我的用于验证电子邮件地址的正则表达式错误为;“没什么可重复的吗?”;?

Javascript 为什么我的用于验证电子邮件地址的正则表达式错误为;“没什么可重复的吗?”;?,javascript,regex,string,Javascript,Regex,String,我正在学习如何使用regex,它将根据以下标准验证电子邮件地址: user@domain.extension如果其域和扩展名为example123.com,并且用户的值满足以下约束条件,则为有效: 它以1到6个小写英文字母开头,由字符类[a-z]表示 小写字母后跟可选下划线,即零或一次出现u字符 可选下划线后面是0到4个可选数字,由字符类[0-9]表示 理想情况下 re.test(logic@example123.com) --> should return true re.test(

我正在学习如何使用regex,它将根据以下标准验证电子邮件地址:

user@domain.extension如果其域和扩展名为example123.com,并且用户的值满足以下约束条件,则为有效:

  • 它以1到6个小写英文字母开头,由字符类[a-z]表示
  • 小写字母后跟可选下划线,即零或一次出现u字符
  • 可选下划线后面是0到4个可选数字,由字符类[0-9]表示
理想情况下

re.test(logic@example123.com) --> should return true
re.test(logic_@example123.com) --> should return true
re.test(logic_0@example123.com) --> should return true
re.test(logic2_0@example123.com) --> should return false
re.test(logic_0@gmail.com) --> should return false
到目前为止,我有:
constre=/^[a-z]{1,6}[\d}{0,4}+@[example123\.com]$/ig

我得到一个错误“没什么可重复的”。我已经浏览了其他stackoverflow帖子,但仍然不能完全理解为什么我的模式不起作用

试试这个:

^[a-z]{1,6}_?\d{0,4}?@(example123\.com)$

\d{0,4}+
中,
+
不能是
{0,4}
的量词,因此它“无需重复”。它可以是
\d{0,4}
\d+

此外,方括号用于字符范围或普通字符。不要在
[\u?]
中使用它们,这将在这里被解释为搜索
\

由于电子邮件中不需要大写字母,因此必须删除正则表达式中忽略大小写的
i
修饰符

试试这个:

const re=/^[a-z]{1,6}\d{0,4}@example123\.com$/

控制台日志(重新测试(“logic@example123.com"));谢谢@SLePort。我试图理解为什么
\d{0,4}+
无效。是不是因为
{0,4}
说我可以匹配重复0到4次的数字,而添加
+
是多余的我添加了
+
符号,因为我想连接到我的
@
,但现在我知道不需要了。再次感谢@jds
+
量词表示“一个或多个”。在
\d{0,4}+
中,您试图累积量词(“一个或多个零到四”…),这是行不通的。您最终可以使用
(\d{0,4})+
来搜索一个或多个4位数的序列。多亏了@SLePort,我才在regex中升级了。修正了错误。结案:)