我无法完全将正面积极的态度和JavaScript中的回溯结合起来。我读了这个answer和这个article,并用https://regex101.com/做了一些测试,但并没有得到我期望的结果。
因此,给定测试字符串 banana12 ,以下工作即可:
(?=\d{2,})
-断言该字符串至少包含两位数字(?=[a-z]{5,})
-断言该字符串至少包含五个小写字符这两个条件对 banana12 和 12banana 都适用。
但是,当我尝试将两个(?=\d{2,})(?=[a-z]{5,})
组合在一起时,没有找到匹配项。为了在使用 banana12 时获得匹配,我需要将\D*
添加到数字测试前瞻:(?=\D*\d{2,})(?=[a-z]{5,})
。
(?=\d{2,})(?=[a-z]{5,})
为什么不起作用?
如果我将测试字符串更改为 12banan ,要获得匹配项,我需要使用:(?=\d{2,})(?=[^a-z]*[a-z]{5,})
-所以这次没有数字的回溯,小写字母的回溯。 / p>
因此,通常来说,如果我想确保我的正则表达式正确匹配两个字符串( 12banana , banana12 ),我需要使用:{{1} }。
为什么?如果两个先行都可以独立发挥作用,那么为什么不将它们组合使用,又为什么有必要添加回溯功能呢?