我在JavaScript中创建一个正则表达式,它应该查找数字(至少1)和字母(至少1),总长度在6到10之间。我遇到了一些意想不到的行为。
我的正则表达式 - /^[a-z+\d+]{6,10}$/g
。
这不能正常工作,因为它在字符类中,它会检查字母或数字,但不能同时检查。因此,我希望"123456"
失败,因为虽然它包含6个字符,并且至少有1个数字,但它不包含1个字母。
但是,在下面的代码段中,当我将正则表达式存储在rgx
变量中并对其使用.test()
时,它会以某种方式正确返回false
,如第二个{ {1}}陈述。但是在下一行,当我直接使用带有console.log
的正则表达式时,它返回.test()
。
true
这里发生了什么?
答案 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