n{X,Y}量词在JavaScript中不使用大括号

n{X,Y}量词在JavaScript中不使用大括号,javascript,regex,Javascript,Regex,我期望从[a-z]{1,5}中匹配一到五个小写字符,但它似乎匹配除空字符以外的任何给定字符。我错过什么了吗?JS支持括号中的量词吗?您忘记了“yoyo”包含一个1到5个字符的字符串 如果只想匹配完整字符串,则必须锚定正则表达式: >>> patt = new RegExp("[a-z]{1,5}") RegExp /[a-z]{1,5}/ >>> patt.test("yo") true >>> patt.test("") false >

我期望从[a-z]{1,5}中匹配一到五个小写字符,但它似乎匹配除空字符以外的任何给定字符。我错过什么了吗?JS支持括号中的量词吗?

您忘记了“yoyo”包含一个1到5个字符的字符串

如果只想匹配完整字符串,则必须锚定正则表达式:

>>> 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
.test()
函数的意思是“可以在搜索字符串中找到此模式吗?”。(或者就像Ruby的人会说的,“你能在草堆里找到这根针吗?”)

如果要精确测试该正则表达式,必须将开始(
^
)和结束(
$
)分隔符:

var regex = /^[a-z]{1,5}$/;

否则它会检查你的字符串的任何部分是否与你的正则表达式匹配。

如果你在字符串中间寻找它,这会起作用。 如果没有,请按照大家的建议使用^$anchors

var patt = new RegExp("^[a-z]{1,5}$")
patt.test("") // false
patt.test("yo") // true
patt.test("yoyoy") // true
patt.test("yoyoyo") // false

为什么只有Ruby人才会大海捞针呢?一点programmerist@RoryPicko92我不确定;我总是在Ruby或Rails环境中看到它。我过着非常隐蔽的生活,所以我可能错了:)当然,这个比喻没有错。
 #  /(?:^|[^a-z])([a-z]{1,5})(?=[^a-z]|$)/     

 (?: ^ | [^a-z] )
 ( [a-z]{1,5} )
 (?= [^a-z] | $ )