繁体   English   中英

JS - 积极向前看和结束

[英]JS - Positive Look Ahead & End Of Line

为什么第一次测试失败了?

/^[ab](?=[cd])$/.test('ac') // => false

/^[ab](?=[cd])/.test('ac')  // => true

只有字符串'ac','ad','bc'和'bd'才能通过。

没有其他字符串,如'ac bd'或'acbd'。

但是,使用$在第一个正则表达式中没有帮助,而第二个正在传递像'acbd'这样的字符串。

您需要了解前瞻的工作方式。

(?=[cd])$ positive -ahead-ahead检查以下字符是否与前瞻后的模式匹配(在您的情况下,字符串的结尾)。 字符串的结尾不是c也不是d 因此,没有匹配。

你需要把$的先行,使之匹配a

^[ab](?=[cd]$)

请参阅Regex101.com上的演示

正则表达式可视化

Debuggex演示

这个正则表达式应该通过:

/^[ab](?=[cd]$)/.test('ac') 

原因

/^[ab](?=[cd])$/.test('ac') 

失败,因为$ (输入结束)后是不是有ab (有一个字母ca )。

/^[ab](?=[cd])$/.test('ac') // => false

由于您未捕获c因此失败。 Lookahead0宽度断言。他们不会捕获任何东西只是断言。你的字符串匹配失败,因为你已经启用了anchors ,因此整个字符串应该匹配。在你的第二种情况下,它会因为没有$而获得部分匹配。

你需要的是什么

^[ab][cd]$

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM