使用.test()的JavaScript Regex意外行为

时间:2017-11-05 09:52:53

标签: javascript regex

我在JavaScript中创建一个正则表达式,它应该查找数字(至少1)和字母(至少1),总长度在6到10之间。我遇到了一些意想不到的行为。

我的正则表达式 - /^[a-z+\d+]{6,10}$/g

这不能正常工作,因为它在字符类中,它会检查字母或数字,但不能同时检查。因此,我希望"123456"失败,因为虽然它包含6个字符,并且至少有1个数字,但它不包含1个字母。

但是,在下面的代码段中,当我将正则表达式存储在rgx变量中并对其使用.test()时,它会以某种方式正确返回false,如第二个{ {1}}陈述。但是在下一行,当我直接使用带有console.log的正则表达式时,它返回.test()

true

这里发生了什么?

2 个答案:

答案 0 :(得分:2)

尝试

let rgx = /^[a-z+\d+]{6,10}$/g;
let rgx2 = /^[a-z+\d+]{6,10}$/g;
console.log(rgx.test("abcd12")); //true
console.log(rgx2.test("123456")); //true

这是因为

  

Javascript RegExp对象是有状态的,即如果您重新使用RegExp对象(设置了'g'标志),后续匹配将从最后一个匹配结束开始。

答案 1 :(得分:-1)

尝试使用/ ^ [^ a-z0-9] {6,10} $ / g