首页 > 解决方案 > /(?<=.*)(\w\w)(?=.*)/ 没有给出我所期望的

问题描述

我正在/(?<=.*)(\w\w)(?=.*)/浏览器的控制台中尝试以下正则表达式。

我按如下方式阅读此正则表达式:“查找并捕获前面和后面出现零个或多个字符的任意两个字母数字字符”。

使用“abcde”作为输入,我希望我的浏览器匹配“ab”、“bc”、“cd”和“de”。

为什么它只给我“ab”和“cd”?

有没有办法让正则表达式返回我想要的所有匹配项(“ab”、“bc”、“cd”和“de”)?

我知道环顾四周的用途,并且我已经了解了正则表达式 '(?<=#)[^#]+(?=#)' 是如何工作的?. 自 2018-2019 年起,Google Chrome 支持 Lookbehind。

提前致谢

一些控制台语句

标签: regexregex-lookaroundsregex-group

解决方案


  1. /(?<=.*)(\w\w)(?=.*)//(\w\w)/“前后出现零次或多次出现”在任何情况下始终匹配(因为它匹配空字符串)是相同的。

  2. 零长度断言(\b, $,(?=)等)不同,所有其他表达式都是非零长度的,即它们从字符串中消耗一部分长度。有一些搜索光标按此长度前进并且永不后退。如果找到 2 个符号,则此光标前进 2 个符号,然后继续搜索。

对于所描述的行为,您需要像这样手动移动此光标:

const str = 'abcde';

const re = /(\w\w)/g;

let result;

while (result = re.exec(str)) {
  console.log(result);
  re.lastIndex--;
}


推荐阅读