Javascript 为什么我的正则表达式未通过此案例(包含代码)

Javascript 为什么我的正则表达式未通过此案例(包含代码),javascript,regex,Javascript,Regex,我正在尝试匹配长度大于5个字符且有两个连续数字的字符串。 let pass = "ast3434"; let pwRegex = /(?=\w{5,})(?=(\d{2}))/; let result = pwRegex.test(pass); console.log(result); 对于“asd234asd”,它返回true 但对于“asd345”或“4543sdf”等情况,返回false 为什么?它与“asd345”不匹配的原因是您使用了两个断言(非消费性),这两个断言都必须为真 因此

我正在尝试匹配长度大于5个字符且有两个连续数字的字符串。

let pass = "ast3434";
let pwRegex = /(?=\w{5,})(?=(\d{2}))/; 
let result = pwRegex.test(pass);
console.log(result);
对于“asd234asd”,它返回true 但对于“asd345”或“4543sdf”等情况,返回false


为什么?

它与“asd345”不匹配的原因是您使用了两个断言(非消费性),这两个断言都必须为真

因此,在右边没有直接的数字和2个数字,右边有直接的5个单词字符的位置

Is与
4543sdf
不匹配,因为两个断言都成功

您可以使用锚,并使用带有量词的单个前瞻

^(?=[^0-9]*[0-9]{2})\w{5,}$

它与“asd345”不匹配的原因是您使用了两个断言(非消费),这两个断言都必须为真

因此,在右边没有直接的数字和2个数字,右边有直接的5个单词字符的位置

Is与
4543sdf
不匹配,因为两个断言都成功

您可以使用锚,并使用带有量词的单个前瞻

^(?=[^0-9]*[0-9]{2})\w{5,}$


^从
\w{5}任意单词字符,5次
\d{2}唯一数字:2次。


具有捕获序列:

(^\w{5})(\d{2})

^从
\w{5}任意单词字符,5次
\d{2}唯一数字:2次。


具有捕获序列:

(^\w{5})(\d{2})

对于
12345abcde
这将返回false,对于
12345abcde
这将返回false,我对您的答案感到满意。有一件事,为什么一开始就使用^。它在没有^的情况下也能工作。看到这一点,如果没有它,它也会匹配,但是起始处的锚断言,从起始处开始,字符串中应该有两个连续的数字。如果没有,匹配将失败,无需再次检查。如果您不使用锚定,表达式失败将需要更多步骤,因为断言将为下一个字符再次运行。它有一个挑战,使正则表达式通过使用2个正向前瞻,这就是为什么我使用2个前瞻。我找到了一种方法,
(?=\w{5,})(?=\D*(\D{2,}))
使用2个正向前瞻可以提高效率。哦,找到了锚定点。感谢time man和regex101.com网站。正则表达式的第二天。我对你的回答很满意。有一件事,为什么一开始就使用^。它在没有^的情况下也能工作。看到这一点,如果没有它,它也会匹配,但是起始处的锚断言,从起始处开始,字符串中应该有两个连续的数字。如果没有,匹配将失败,无需再次检查。如果您不使用锚定,表达式失败将需要更多步骤,因为断言将为下一个字符再次运行。它有一个挑战,使正则表达式通过使用2个正向前瞻,这就是为什么我使用2个前瞻。我找到了一种方法,
(?=\w{5,})(?=\D*(\D{2,}))
使用2个正向前瞻可以提高效率。哦,找到了锚定点。感谢time man和regex101.com网站。正则表达式的第二天。爱它