Alan BM Asked: 2020-12-28 20:54:23 +0800 CST 2020-12-28 20:54:23 +0800 CST 2020-12-28 20:54:23 +0800 CST 怀疑用正则表达式验证 4 位或 6 位数字的 PIN [重复] 772 我在 javascript 中有一个正则表达式,我不明白括号的功能是什么,因为当我删除它们时,正则表达式不再起作用并接受 4 位或更多位 /^(\d{4}|\d{6})$/g javascript 1 Answers Voted Best Answer Julio 2020-12-29T01:18:52+08:002020-12-29T01:18:52+08:00 括号()用于分组并另外用于捕获(捕获意味着能够稍后检索在括号内找到的片段)。 非捕获括号(?:)仅用于分组。 在您的正则表达式中,使用括号(没有捕获的括号就足够了)是必要的,因为删除它们会留下以下内容: ^\d{4}|\d{6}$ 如您所知,它|用于分隔两个表达式。通过删除括号,行首^是左边表达式的一部分,而行尾$是右边表达式的一部分。所以这个表达式的意思是: 以 4 个数字开头或以 6 个数字结尾 这允许您输入超过 6 位数字甚至字母的数字,只要它以 6 位数字结尾或前 4 位是数字即可。 所以你真正想要的是表达式的每个部分都有一个开始和结束,这就是你使用括号来分组这两个选项的原因。 如果您不想使用括号,则等效表达式为: ^\d{4}$|^\d{6}$ 也就是说,我们将^和添加$到双方。 另一种选择可能是: ^\d{4}(?:\d\d)?$ 即:字符串的开头,4 个数字,然后是可选的?两个数字。请注意,我使用一个组将两个数字组合在一起,以便同时?影响它们。这样,两个数字要么出现,要么都不出现。 笔记 如果不打算捕获括号内的内容,则认为使用非捕获括号更合适。例如: ^(?:\d{4}|\d{6})$
括号
()
用于分组并另外用于捕获(捕获意味着能够稍后检索在括号内找到的片段)。非捕获括号
(?:)
仅用于分组。在您的正则表达式中,使用括号(没有捕获的括号就足够了)是必要的,因为删除它们会留下以下内容:
如您所知,它
|
用于分隔两个表达式。通过删除括号,行首^
是左边表达式的一部分,而行尾$
是右边表达式的一部分。所以这个表达式的意思是:这允许您输入超过 6 位数字甚至字母的数字,只要它以 6 位数字结尾或前 4 位是数字即可。
所以你真正想要的是表达式的每个部分都有一个开始和结束,这就是你使用括号来分组这两个选项的原因。
如果您不想使用括号,则等效表达式为:
也就是说,我们将
^
和添加$
到双方。另一种选择可能是:
即:字符串的开头,4 个数字,然后是可选的
?
两个数字。请注意,我使用一个组将两个数字组合在一起,以便同时?
影响它们。这样,两个数字要么出现,要么都不出现。笔记
如果不打算捕获括号内的内容,则认为使用非捕获括号更合适。例如: