regex - /(?<=.*)(\w\w)(?=.*)/ 没有给出我所期望的
问题描述
我正在/(?<=.*)(\w\w)(?=.*)/
浏览器的控制台中尝试以下正则表达式。
我按如下方式阅读此正则表达式:“查找并捕获前面和后面出现零个或多个字符的任意两个字母数字字符”。
使用“abcde”作为输入,我希望我的浏览器匹配“ab”、“bc”、“cd”和“de”。
为什么它只给我“ab”和“cd”?
有没有办法让正则表达式返回我想要的所有匹配项(“ab”、“bc”、“cd”和“de”)?
我知道环顾四周的用途,并且我已经了解了正则表达式 '(?<=#)[^#]+(?=#)' 是如何工作的?. 自 2018-2019 年起,Google Chrome 支持 Lookbehind。
提前致谢
解决方案
/(?<=.*)(\w\w)(?=.*)/
与/(\w\w)/
“前后出现零次或多次出现”在任何情况下始终匹配(因为它匹配空字符串)是相同的。与零长度断言(
\b
,$
,(?=)
等)不同,所有其他表达式都是非零长度的,即它们从字符串中消耗一部分长度。有一些搜索光标按此长度前进并且永不后退。如果找到 2 个符号,则此光标前进 2 个符号,然后继续搜索。
对于所描述的行为,您需要像这样手动移动此光标:
const str = 'abcde';
const re = /(\w\w)/g;
let result;
while (result = re.exec(str)) {
console.log(result);
re.lastIndex--;
}
推荐阅读
- hashmap - Java:我的 HashMap 查找失败,因为它是通过 REFERENCE 而不是 VALUE 进行的。我该如何解决?
- c# - 为什么我的绑定在没有 SubscribeOn/ObserveOn 的情况下不会更新?
- python - 使用 sklearn 在 python 中使用 BernoulliNB 后无法找到正确的预测结果
- javascript - js 致命错误 - 在 addtcart 中输出 nri
- python - 无法在 Windows 10 上进行 pipenv 安装
- javascript - 带有视差横幅的粘性导航
- composer-php - 具有依赖项的 Composer 包给了我错误
- php - 插入我的本地 sql server
- reactjs - 反应异步组件WillUnmount
- xml - 通过 isXML() 但在 ColdFusion 中失败 xmlParse() 的 XML