我试图扩大自己的正则表达式知识,但我不知道为什么下面的返回true:为什么这个正则表达式匹配?
/[A-Z]{2}/.test("ABC")
// returns true
我明确地把{2}
在表达这应该意味着,只有刚好两个大写字母匹配。
根据http://www.regular-expressions.info/repeat.html:
省略两个逗号和最大告诉引擎正好重复令牌分钟时间。
什么我误解吗?
我试图扩大自己的正则表达式知识,但我不知道为什么下面的返回true:为什么这个正则表达式匹配?
/[A-Z]{2}/.test("ABC")
// returns true
我明确地把{2}
在表达这应该意味着,只有刚好两个大写字母匹配。
根据http://www.regular-expressions.info/repeat.html:
省略两个逗号和最大告诉引擎正好重复令牌分钟时间。
什么我误解吗?
您必须使用^
和$
来锚定正则表示字符串的开始和结束。
/^[A-Z]{2}$/.test("ABC")
// returns false
您当前的正则表达式匹配字符串的“AB”部分。
它匹配AB
的ABC
前两个字母。
做一个整场比赛中,使用^
和$
锚:
/^[A-Z]{2}$/.test("ABC")
这恰好2个大写字母整个字符串匹配。
您应该使用^[A-Z]{2}$
只有整个字符串,而不是它的一部分相匹配。在你的示例中,正则表达式匹配AB
- 这确实是连续两个大写字母。
你在你的正则表达式中缺少^
和$
字符 - 字符串的开头和字符串的结尾。因为他们缺少你的正则表达式说:“2个字符”,而不是“只有两个字符”,所以它只要符合“AB”或在您的字符串“BC” ......
的文档不会说谎:)
忽略逗号和最大值都会告诉引擎重复令牌的最小次数。
它说分钟时间没有最大次
究竟分钟的时间,这意味着正是2,如果我使用'{2}'作为分是2在这里。这是不正确的? – pimvdb 2011-03-12 19:37:35
不,你发布的正则表达式匹配任何包含至少2个连续大写字母的字符串,所以在测试字符串的情况下,它会匹配2次,一个用于AB,另一个用于BC。尝试在这里运行一些正则表达式:http://www.rubular.com/(一个很好的正则表达式操场:D) – Augusto 2011-03-12 19:41:02
啊,我想任何字符串* * *正好是两个大写字母。 – pimvdb 2011-03-12 19:41:57