为什么前瞻不匹配下一个术语的任一侧?

Why doesn't lookahead match on either side of the following term?

我正在尝试使用先行检查来检查字符串是否在任何位置包含模式,但是,我有点难以理解它。

模式 (?=.*px)[\d]+ 应该匹配(据我所知)在字母 p 和 x 之前或之后也有字母 p 和 x 的任何数字(作为组,因此 12 将是一个匹配),无论位置 (.*).

该模式在使用“12px”时按预期工作,匹配 12 但不匹配 px。但是,如果我使用 px12 它不再与 12 匹配,我很难理解为什么。此外,字符串“12pxpx12px12”匹配第一个和第二个 12,因为它们后面都有 px,但不是最后一个。

这里有一些例子供参考:

如果有人能向我解释我期待实现的目标以及编写正则表达式的正确方法是什么,我将不胜感激。

前瞻(?=px)表示“紧接紧随这一点的子串是px”,而\d+表示“此时的子串点是多位数字”。这些是互不相容的陈述。环视是 零宽度 断言,这意味着如果你想在 之前匹配某些东西 \d+ 这样的具体断言,你不能使用lookahead,你需要使用lookbehind。

在我的脑海中,我能想到的最好的解决方案是使用异或:

(?<=px)\d+|\d+(?=px)

Try it on regex101