找到适合的正则表达式模式:

时间:2018-06-25 11:41:33

标签: regex

查找所有6位和8位未跟随或未包含数字的集团:

Ex:

123456-222222VALUE_X334455667788STACKOVERFLOW12345678()333333KO-987654,36CODING6

您应该找到:

123456
222222
12345678
333333
987654

什么是正则表达式模式?

这不起作用:

(^|\D)((\d{6})|(\d{8}))($|\D)/g

为什么222222组不匹配。

3 个答案:

答案 0 :(得分:2)

在第一次迭代期间,将-之后的123456($|\D)模式部分匹配并消耗掉,因此,最好使用(?!\d)(或{ {1}},但(?=$|\D更快。

您可以使用

(?!\d)

请参见regex demo

详细信息

  • (?:^|\D)(\d{6}(?:\d{2})?)(?!\d) -字符串开头或任何非数字
  • (?:^|\D)-第1组:6位数字,后跟2位数字
  • (\d{6}(?:\d{2})?)-不允许在6或8位数字之后输入数字。

答案 1 :(得分:2)

您可以为此使用否定的前瞻性概念和否定的后瞻性概念,如下所示:

(?<!\d)(\d{6}|\d{8})(?!\d)

(?<!\d)是负向后移,以确保数字前面没有数字。

(?!\d)为负性,以确保数字后没有数字。

您可以在操作here中看到此正则表达式

答案 2 :(得分:0)

我保留此解决方案:(?:^ | \ D)(\ d {6}(?:\ d {2})?)(?!\ d)

谢谢大家。 跑了 祝你今天愉快 再见