Javascript正则表达式断言
我举了一个例子:Javascript正则表达式断言,javascript,regex,assert,Javascript,Regex,Assert,我举了一个例子: /(?=\d)(?=[a-z])/。测试(“3a”)返回false 但是这个 /(?=\d)(?=.[a-z])/。测试(“3a”)有效 你能解释一下吗?你的第一个模式 /(?=\d)(?=[a-z])/.test("3a") 断言数字和字母出现在同一位置。显然,这永远不会是真的。另一方面,您的第二种模式: /(?=\d)(?=.*[a-z])/.test("3a") 断言出现了一个数字,它还断言字符串中的任何位置都出现了一个字母。这与输入的3a相匹配。让我详细分析一下您正
/(?=\d)(?=[a-z])/。测试(“3a”)
返回false
但是这个
/(?=\d)(?=.[a-z])/。测试(“3a”)
有效
你能解释一下吗?你的第一个模式
/(?=\d)(?=[a-z])/.test("3a")
断言数字和字母出现在同一位置。显然,这永远不会是真的。另一方面,您的第二种模式:
/(?=\d)(?=.*[a-z])/.test("3a")
断言出现了一个数字,它还断言字符串中的任何位置都出现了一个字母。这与输入的
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])/
这个:/(?=\d)(?=\w)/。测试(“3a”)这不意味着断言数字和字母出现在同一个地方吗?但它是有效的。@Nick如果有效,那一定意味着\w
包含数字。换句话说,您在某种程度上声明了相同的内容。\w不包括数字。只有文字。@Nick是的,\w
。