62,634
社区成员




(?<=^(?:[^\/]+\/){0})[^\/]+
(?<=^(?:[^\/]+\/){3})[^\/]+
其中的数字含义为 n - 1。
正则引擎是从以左往右的顺序为主的,所以一般即便支持也只是支持简单的、固定好字符串长度的 look-behind 行为,此例子中的 look-behind 部分正则长度是未知的。
先来看看下面用最新版 Chrome 测试的结果:
^(?:[^\/]+\/){0}([^\/]+)
^(?:[^\/]+\/){1}([^\/]+)
^(?:[^\/]+\/){3}([^\/]+)
^(?:[^\/]+\/){5}([^\/]+)
^(?:[^\/]+\/){6}([^\/]+)
^(?:[^\/]+\/){7}([^\/]+)
花括号内的数字表示 n - 1。最右边的圆括号匹配内容会被存入分组1中,因此你可以通过代码获取分组1的值,分组1的值内容如图中文本的绿色部分:
^([^\/]+\/){}(*SKIP)(?!)|[^\/]+
^([^\/]+\/){1}(*SKIP)(?!)|[^\/]+
^([^\/]+\/){3}(*SKIP)(?!)|[^\/]+
以上3条正则分别表示第1部分、第2部分、第4部分。
其中的数字表示要左侧要跳过的诸如“xxx/”段落个数,
如无需跳过时要留空,如:
^([^\/]+\/){}(*SKIP)(?!)|[^\/]+
也等同于:
[^\/]+
匹配图如下:
[^\/]+(?=(?:\/[^\/]+){0}$)
[^\/]+(?=(?:\/[^\/]+){1}$)
[^\/]+(?=(?:\/[^\/]+){3}$)
[^\/]+(?=(?:\/[^\/]+){5}$)
[^\/]+(?=(?:\/[^\/]+){6}$)
[^\/]+(?=(?:\/[^\/]+){7}$)
其中数字也是表示原字符串中左侧要跳过的“xxx/”片段数量
匹配结果如图:
^([^\/]+\/){4}
变动其中的数字就是对应的 n
匹配如下图,可以放大了看: