regular expressions: match x times OR y times

后端 未结 4 1461
面向向阳花
面向向阳花 2020-12-01 17:46

Lets say I need to match a pattern if it appears 3 or 6 times in a row. The closest I can get is something like \\d{3,6} but that doesn\'t quite do what I need.

\'12

4条回答
  •  悲&欢浪女
    2020-12-01 18:30

    For this case we can get away with this crafty method:

    Clean Implementation

    /(\d{3}){1,2}/
    /(?:\d{3}){1,2}/
    

    How?!

    This works because we're looking for multiples of three that are consecutive in this case.

    Note: There's no reason to capture the group for this case so I add the ?: non capture group flag to the capture group.

    This is similar to paxdiablo implementation, but slightly cleaner.

    Matching Hex

    I was doing something similar for matching on basic hex colors since they could be 3 or 6 in length. This allowed me to keep my hex color checker's matching DRY'd up ie:

    /^0x(?:[\da-f]{3}){1,2}$/i
    

提交回复
热议问题