我有这个例子:
/(?=\d)(?=[a-z])/.test("3a")
返回 false
但是这个
/(?=\d)(?=.*[a-z])/.test("3a")
有效。
你能解释一下吗?
最佳答案
让我分解一下你在做什么:
Test string = test("3a")
示例 1:/(?=\d)(?=[a-z])/
(?=\d)
是正向预测,下一个字符是数字
(?=[a-z])
是正向预测,表示下一个字符在 a-z 范围内
这是不可能的,并且总是返回 false,因为它断言下一个字符既是 a-z 又是不可能是的数字。
示例 2:/(?=\d)(?=.*[a-z])/
(?=\d)
是正向预测,下一个字符是数字
(?=.*[a-z])
是一个积极的前瞻,在匹配开始之后的字符串中的任何位置都有一个字符在 a-z 范围内
这会在测试字符串中看到 3a
,因为从 3 开始匹配,下一个字符是数字,并且 3a 满足 .*[a-z]
断言。
指出这一点可能很重要,也可能不重要,因为这些是前瞻,所以您实际上并没有匹配任何内容。我不知道你到底想做什么。
如果您想测试数字后面是否有 a-z,您可以将其放入一个断言中:
/(?=\d[a-z])/
关于Javascript 正则表达式断言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48163195/