用于将数字与两个和三个编号模式一起匹配的正则表达式

dal*_*dry 6 javascript regex

我有一个 5 个数字的数组,我想匹配只要数组中有3相同的数字2 个相同的不同数字位置并不重要。数字序列可以是 1 - 5 之间 5 个数字的任何随机字符串。匹配示例如下: 33322 24422 52225 44111 54545 *基本上,任何 2 和 3 个相同数字的分组都需要匹配。

到目前为止我想出的最好的: ^([0-9])\1{2}|([0-9])\1{1}$

我不太擅长正则表达式,任何帮助将不胜感激。

Wik*_*żew 4

您可以使用

^(?=[1-5]{5}$)(?=.*(\d)(?:.*\1){2})(?=.*(?!\1)(\d).*\2)\d+$
^(?=.*(\d)(?:.*\1){2})(?=.*(?!\1)(\d).*\2)[1-5]{5}$
Run Code Online (Sandbox Code Playgroud)

请参阅正则表达式演示

如果您想允许任何数字,请替换[1-5]\d

细节

  • ^- 字符串的开头
  • (?=[1-5]{5}$)1- 从到到字符串末尾必须有五位数字5(这种前瞻使得不匹配的字符串更快失败)
  • (?=.*(\d)(?:.*\1){2})- 正向先行,要求尽可能多的任何零个或多个字符,后跟一个数字(捕获到组 1 中),然后是两个尽可能多的任何零个或多个字符的序列以及立即捕获到组 1 中的相同数字在当前位置的右侧
  • (?=.*(?!\1)(\d).*\2)- 正向先行,要求尽可能多的任何零个或多个字符,后跟一个不等于第 1 组中的数字的数字(捕获到第 2 组),然后是尽可能多的任何零个或多个字符,以及与捕获到紧邻当前位置右侧的第 2 组中的数字相同
  • \d+- 一位或多位数字
  • $- 字符串末尾。