了解JavaScript中的积极前瞻和回溯

时间:2019-02-12 11:52:00

标签: javascript regex positive-lookahead

我无法完全将正面积极的态度和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} }。

为什么?如果两个先行都可以独立发挥作用,那么为什么不将它们组合使用,又为什么有必要添加回溯功能呢?

0 个答案:

没有答案