Javascript RegEx断言

缺口

我有这个例子:

/(?=\d)(?=[a-z])/.test("3a")返回,false但这/(?=\d)(?=.*[a-z])/.test("3a")有效。

你能解释一下吗?

杰克·普瑞德

让我分解一下你在做什么:

Test string = test("3a")

范例1: /(?=\d)(?=[a-z])/

(?=\d)是正向预报,表示下一个字符是数字,
(?=[a-z])是正向预报,是下一个字符在az范围内

这是不可能的,并且由于断言下一个字符既是az又是数字,所以始终返回false。

范例2: /(?=\d)(?=.*[a-z])/

(?=\d)是正向前瞻,表示下一个字符是数字,
(?=.*[a-z])是正向前瞻,表示匹配开始后字符串中的任意位置有一个字符在z范围内

这是3a在测试字符串中看到的,因为从3开始匹配时,下一个字符是一个数字,而3a完成了.*[a-z]断言。

需要指出的是,由于这些是先行的,因此您实际上并没有匹配任何内容,这一点可能重要,也可能不重要。我不知道你到底在想做什么。

如果要测试数字后是否有az,可以将其置于一个断言中:
/(?=\d[a-z])/

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章