正则表达式 - 不了解查找数字是否有多个数字的前瞻

Regex - Don't understand lookaheads for finding if a number has multiple digits

我一直在努力学习正则表达式中的前瞻。

我正在尝试匹配以小写字母开头且有 4 个或更多数字的表达式。

/(?=\A[a-z])(?=\D\d{4,})/

如果数字彼此相邻,则此方法有效,但如果它们彼此远离,则无效。例如

z1562 - 通过(所有 4 个数字都相邻)

z15a62 - 失败 - 有 4 个数字

我哪里错了?我该如何解决这个问题?

您可以使用

\A(?=[a-z])(?=(?:\D*\d){4,})
              ^^^^^^^^^

您需要使用 * 匹配数字前的任意数量的非数字,至少 4 次(因此,您需要将 \D*\d 分组并将限制量词应用于组)。

regex demo

还值得一提的是,\A锚点应该移到前瞻之外,这样它只在字符串的开头触发一次。它还将使第二次前瞻仅在第一个之后触发一次。