2014-01-16 26 views
0
>>> 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 

我希望從什麼[AZ] {1,5}是匹配五點差一分小寫字符,但它似乎是被什麼匹配除了空值外。我錯過了什麼嗎? JS是否支持括號的量詞?N {X,Y}量詞在JavaScript中沒有用大括號工作

回答

3

你忘記了「yoyoyoyo」包含一個字符串在一到五個字符之間。

如果你想完全匹配的字符串而已,你必須錨定的正則表達式:「可這種模式在搜索字符串中找到」

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

.test()功能是指,。 (或者,Ruby人會說,「你能在這種乾草堆裏找到這根針嗎?」)。

+0

爲什麼只有Ruby人會用乾草堆比喻來使用針頭?位程序員 – rorypicko

+0

@ RoryPicko92我不確定;我只是總是在Ruby或Rails的背景下看到它。我過着相當庇護的生活,所以我可能是錯的:)當然,這種比喻沒有任何錯誤。 – Pointy

6

如果你想測試正是這個正則表達式,則必須將啓動(^)和結束($)分隔符:

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

否則它只是檢查,如果你的字符串匹配的任何部分你的正則表達式。

0

如果你正在字符串中間尋找它,這將起作用。
如果沒有,請按照大家的建議使用^ $錨。

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

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