首页 > 解决方案 > 如果值在正则表达式中重复,则不匹配

问题描述

我想使用这个正则表达式匹配 -

/\[([1-6],){0,5}[1-6]\]/

一些应该匹配的例子是 -

[1,2,3,4,5,6]
[2]
[1,2,3]
[1,2]
[1,2]
[1,4,2]

一个字符串,它是一个数字数组,最大可能长度为 6。数字只能介于 1 和 6 之间。正则表达式有效。但我不希望它匹配这样的东西 -

[1,2,3,2]
[1,2,2]
[2,2]

基本上数字不应该重复。如果他们这样做,正则表达式不应该匹配。我必须如何更改正则表达式才能实现这一目标?

标签: regex

解决方案


当您匹配确切的模式时,您可以使用带有捕获组和反向引用的负前瞻来断言(?!.*(\d).*\1)没有两次出现相同的数字。

^(?!.*(\d).*\1)\[(?:[1-6],){0,5}[1-6]?\]

正则表达式演示

稍微优化的模式可能只匹配逗号和数字[,\d]*,而不是使用.*

^\[(?![\d,]*(\d)[\d,]*\1)(?:[1-6],){0,5}[1-6]?\]

正则表达式演示


推荐阅读