>>> patt = new RegExp("[a-z]{1,5}")
RegExp /[a-z]{1,5}/
>>> patt.test("yo")
true
>>> patt.test("")
false
>>> patt.test("yoyoyoyo")
true
>>> patt.test("yoyoyAAAAoyo")
true
我对[a-z] {1,5}的期望是匹配一到五个小写字符,但它似乎匹配任何给定的除了空值。我错过了什么吗? JS是否支持括号的量词?
答案 0 :(得分:6)
如果您想要完全该正则表达式,则必须设置开头(^
)和结束($
)分隔符:
var patt = new RegExp("^[a-z]{1,5}$")
patt.test("") // false
patt.test("yo") // true
patt.test("yoyoy") // true
patt.test("yoyoyo") // false
否则只会检查字符串的任何部分是否与正则表达式匹配。
答案 1 :(得分:3)
你忘记了“yoyoyoyo”包含一个字符串,包含一到五个字符。
如果只想匹配完整的字符串,则必须锚定正则表达式:
var regex = /^[a-z]{1,5}$/;
.test()
函数意味着“可以在搜索字符串中找到此模式吗?”。 (或者正如Ruby人所说的那样,“你能在大海捞针中找到这根针吗?”)。
答案 2 :(得分:0)
如果你在字符串的中间找它,这将有效 如果没有,请按照每个人的建议使用^ $ anchors。
# /(?:^|[^a-z])([a-z]{1,5})(?=[^a-z]|$)/
(?: ^ | [^a-z] )
( [a-z]{1,5} )
(?= [^a-z] | $ )