我试图找到一种方法来使用RegEx来匹配字符串中包含某些字符的字符串。例如,我想匹配包含字母A
、B
和C
以及数字1
、2
和3
的所有字符串。它们可以在字符串上的任何地方,字母可以出现零次或多次,而数字不能连续出现3次或多次。
在这些条件下,字符串A3BC21
,BBC11CC
和AB22C31CCCAAA
将匹配,但111A
,G05T
或47ABC
不会匹配。
我甚至不知道从哪里开始,因为我见过的每一个RegEx都遵循你想要匹配的字符串的结构,但我从来没有见过一个例子,你要找的模式在字符串上的任何地方。
我试过这样幼稚的事情
^[ABC]+[123]{0,2}$
但这显然不会返回匹配,因为字母必须首先出现。
我还尝试了捕获组:
^([ABC]+|[123]{0,2})$
它要么匹配具有字母模式的字符串,要么匹配具有数字模式的字符串,但不能同时匹配两者。
我也试过正面的形象:
^[ABC]+(?=[123]{0,2})$
但当然,这也不管用我该怎么办?
4条答案
按热度按时间c8ib6hqw1#
你可以使用类似于:
/^
-起始点,起始行锚(?!.*\d{3})
-确保一行中没有三个或更多的数字[ABC]*[123][ABC123]*
-尽可能多次捕获A、B、C、1、2或3,但确保1、2或3出现一次或多次$
-端线锚/gm
-应用全局和多行标志https://regex101.com/r/Wq85Lu/1
slmsl1lt2#
你不能只是验证整个表达式的所有法律的字符,然后检查一个数字序列的最大长度吗?这将需要两个表达式检查。
我将测试以下内容:
/^[ABC123]+$/
/\d{3}/g
uinbv5nw3#
bfnvny8b4#
这可能不应该是一个正则表达式
regex表达式可以识别不匹配项(包含不允许的字符)
这也覆盖A、B、C零次或多次
现在你只剩下数字显示...
如果你画出每个数字上出现一次、两次和三次的排列,你会发现任何你能想到的可能工作的表达式都很难维护,而且可能会有运行时性能问题--即,正则表达式可能没有意义,
相反,计算“1”出现的次数,如果在[1,3]中,则继续计算2,然后计算3