n {X,Y}量词不适用于JavaScript中的大括号

时间:2014-01-16 17:35:17

标签: javascript regex

>>> 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是否支持括号的量词?

3 个答案:

答案 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] | $ )