23 regex
假设我需要匹配一个模式,如果它连续出现3或6次.我能得到的最接近的是\ d {3,6},但这并不能完全符合我的需要.
'123'应匹配
'123456'匹配
'1234'不匹配
cle*_*tus 33
^(\d{3}|\d{6})$
Run Code Online (Sandbox Code Playgroud)
你必须有某种终结器,否则\d{3}将匹配1234.这就是为什么我把^和$放在上面.一种替代方法是使用外观:
(?<!\d)(\d{3}|\d{6})(?!\d)
Run Code Online (Sandbox Code Playgroud)
确保它之前没有数字(在这种情况下).更前瞻和回顾后零宽度断言.
pax*_*blo 12
怎么样:
(\d\d\d){1,2}
Run Code Online (Sandbox Code Playgroud)
虽然你还需要两端的防护装置,这取决于你的RE引擎,例如:
[^\d](\d\d\d){1,2}[^\d]
Run Code Online (Sandbox Code Playgroud)
要么:
^(\d\d\d){1,2}$
Run Code Online (Sandbox Code Playgroud)
对于这种情况,我们可以使用这种狡猾的方法:
/(\d{3}){1,2}/
/(?:\d{3}){1,2}/
Run Code Online (Sandbox Code Playgroud)
这是可行的,因为我们正在寻找在这种情况下连续的三的倍数。
注意:在这种情况下没有理由捕获组,因此我将?:非捕获组标志添加到捕获组。
这与实现类似paxdiablo,但稍微干净一些。
我正在做类似的事情来匹配基本的十六进制颜色,因为它们的长度可能是 3 或 6。这使我能够保持我的十六进制颜色检查器的匹配干燥,即:
/^0x(?:[\da-f]{3}){1,2}$/i
Run Code Online (Sandbox Code Playgroud)