我正在尝试在JavaScript中实现以下正则表达式的否定:
^(\d)\1+-(\d)\1+-(\d)\1+$
该表达式匹配以下内容:
- 11111-111-11111
- 22-2222-2222
- 55-55555-55
但不匹配以下内容:
- 12-22-3345
- 32-44555-3333
我希望它执行与上述情况相反的操作。
我尝试了以下正则表达式,但它们不起作用:
^(?!(\d)\1+-(\d)\1+-(\d)\1+)$
^(?!(\d))\1+-(?!(\d))\1+-(?!(\d))\1+$
^(?!(\d)\1+)-(?!(\d)\1+)-(?!(\d)\1+)$
我原本以为自己对负向先行断言有很好的理解,但显然不是这样。请问我在这里做错了什么?有没有人能指点我一个正确的解决方法?
编辑:这里提供一个链接,可以尝试当前的正则表达式:https://regex101.com/r/jY9mJ6/1
^(\d)\1+-(\d)\1+-(\d)\1+$
在你尝试否定它之后,也匹配了下面这些:11111-21-31111
、22-5222-6222
、55-85555-95
等。这是有意为之吗?我的印象是每个数字块应该只包含一个数字。 - Sam Choukri^(\d)\1+-(\d)\2+-(\d)\3+$
。这将要求每个块由2个或更多相同的数字组成(但是每个块中的数字可以不同)。现在你只需要使用anubhava的解决方案对其进行否定。 - Sam Choukri^(\d)\1+-\1+-\1+$
。这假设块 2 和块 3 可以是 1 个或多个数字。如果您需要它们是 2 个或多个数字:^(\d)\1+-\1\1+-\1\1+$
或^(\d)\1+-\1{2,}-\1{2,}$
。 - Sam Choukri