首页 > 解决方案 > 在正则表达式中保持前瞻值

问题描述

想象一下我有字符串abcdefghi 如果我应用正则表达式

m/([a-z])([a-z])/g

对它,我得到不相交的对 ab, cd, ef, gh.

我想要的是所有重叠的对ab, bc, cd, de, ef, fg, gh, hi.

当我使用前瞻时,例如

m/([a-z])(?=[a-z])/g

我得到每对的第一个字母 a, b, c, d, e, f, g, h,但不保留前瞻本身。

我怎样才能告诉正则表达式引擎我想要第一个字母但也需要前瞻,以获得成对的字母ab, bc, cd, de, ef, fg, gh, hi

标签: regexregex-lookarounds

解决方案


周围的()前瞻是非捕获的,并且因为前瞻是 0 宽度匹配,所以您不会在结果中得到“查看”的字符。

您只需要通过使用捕获组将其包围来制作前瞻捕获的内容:

([a-z])(?=([a-z]))

附带说明一下,还有其他方法可以获得重叠对,例如使用循环到(字符串的长度 - 2)的 for 循环。您可能还想考虑这些选项。


推荐阅读