JS正则expression式,基本的向前看

我无法弄清楚,对于我的生活,为什么这个正则expression式

^\.(?=a)$ 

不匹配

 ".a" 

有谁知道为什么?

我要去了这里提供的信息: https : //developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions

不工作的原因是因为前瞻并不实际消耗任何字符,所以你的匹配位置不会前进。

 ^\.(?=a)$ 

匹配行的开头( ^ – 这匹配)后跟一个文字.\. – 这也匹配),然后(不消耗任何字符),检查下一个字符是否是文字a(?=a) )。 是的,所以前瞻匹配。 然后它断言你的位置在string( $ )的末尾。 事实并非如此,因为我们仍然在这之后. ,所以比赛失败。

另一个可能的匹配expression式是

 ^\.(?=a$) 

它和上面一样工作,但关于行结束的断言包含在前瞻中,所以这一次匹配。

你的正则expression式只会匹配一个“a”,而不包含“a”。 另一个问题是,你在一个基本上被忽略的angular色之后使用$。

删除$,它会像描述的那样工作。

奖金:我最近很喜欢使用这个http://www.regexpal.com/