javascript – 为什么“abcdef”不匹配(?= abc)def但匹配abc(?= def)?

前端之家收集整理的这篇文章主要介绍了javascript – 为什么“abcdef”不匹配(?= abc)def但匹配abc(?= def)?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
参见英文答案 > Regex lookahead,lookbehind and atomic groups3个
在Javascript中,我有一个字符串abcdef,无法弄清楚这种奇怪的行为:

>(?= abc)def与字符串不匹配
> abc(?= def)与字符串匹配

为什么?

解决方法

在(?= abc)def中,(?= abc)捕获为零宽度,并且在成功匹配后不会在输入字符串中向前移动光标.那个结构只是简单地说明一下接下来的三个字符,看看它们是否是abc,如果它们然后检查那些相同的字符是否是def.此时比赛失败..

您需要了解正则表达式引擎如何完成匹配.考虑你的输入字符串abcdef和你的正则表达式abc(?= def).引擎通过匹配a开始然后将输入字符串内的光标移动到下一个字符并尝试匹配b,因为输入字符串中的光标在b上匹配成功.然后引擎移动输入字符串内的光标并尝试匹配c,因为光标位于输入字符串中,c匹配成功,输入字符串中的光标再次移动到下一个字符.现在引擎遇到(?= def),此时引擎只是向前看,看看光标在输入sting中的下三个字符实际上是def而不移动光标,它们是什么,匹配完成成功.

现在考虑输入字符串xyz和正则表达式x(?= y)Z.正则表达式引擎将光标放在输入字符串中的第一个字母上并检查它是否为x并找到一个x,因此它将光标移动到输入字符串中的下一个字符.现在它向前看是否下一个字符是y,它是,但引擎不移动输入文本光标前言,因此输入文本中的光标保持在y上.接下来,引擎查看光标是否在字母z上,但由于输入文本中的光标仍在字母y上,因此匹配失败.

您可以在http://www.regular-expressions.info/lookaround.html阅读更多有关正面和负面前瞻的内容

原文链接:https://www.f2er.com/js/156689.html

猜你在找的JavaScript相关文章