[英]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]$)
这个正则表达式应该通过:
/^[ab](?=[cd]$)/.test('ac')
原因
/^[ab](?=[cd])$/.test('ac')
失败,因为$
(输入结束)后是不是有a
或b
(有一个字母c
后a
)。
/^[ab](?=[cd])$/.test('ac') // => false
由于您未捕获c
因此失败。 Lookahead
是0
宽度断言。他们不会捕获任何东西只是断言。你的字符串匹配失败,因为你已经启用了anchors
,因此整个字符串应该匹配。在你的第二种情况下,它会因为没有$
而获得部分匹配。
你需要的是什么
^[ab][cd]$
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.