Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript正则表达式断言_Javascript_Regex_Assert - Fatal编程技术网

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