我試圖擴大自己的正則表達式知識,但我不知道爲什麼下面的返回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