2013-01-11 89 views
0

運行以下JavaScript代碼,例如,12月12日成功找到。JavaScript正則表達式空格

return messageHtmlBody.match(/[1-31]{1,2}(\s)[a-zA-Z]{3,9}/i)[0]; 

我想回到「2012年12月12」,所以嘗試這種代碼:

return messageHtmlBody.match(/[1-31]{1,2}(\s)[a-zA-Z]{3,9}(\s)\d{4}/i)[0]; 

這不僅不會返回匹配,但代碼甚至沒有成功運行。我嘗試以下太(只是第二(\ S)字符),並且沒有可執行:

return messageHtmlBody.match(/[1-31]{1,2}(\s)[a-zA-Z]{3,9}(\s)/i)[0]; 

是否有一個原因,第二個(\ S)是行不通的?第一個(\ s)成功匹配第一個空格。搜索字符串100%包含字符串「2012年12月12日」,因此找到它不應該是問題。

任何想法?

+0

不太相關的你的問題,但只是測試和'「32」 .match(/ [1- 31] {1,2} /)'returns'[「32」]',所以你可能想要重新思考你的正則表達式... – Passerby

回答

1

[1-31]不是「1到31之間的數字」的有效正則表達式。它是所有接受任何的1,2,3及(與量詞)任何的11,12,13,21,22,23,31,32,33

相反,它應爲(?:3[01]|[1-2][0-9]|[0-9])

另外,圍繞\s放置圓括號是不妥當的。

更具體地講,你也可以明確地規定什麼樣的月份是用:

(?:(?:jan|febr)uary|march|april|may|june|july|august|(?:(?:sept|nov|dec)em|octo)ber)

+0

謝謝大家。這解決了這個問題。 – barryedmund

0

[1-31]{1,2}將不符合你想要的。它相當於[1-3]{1,2}

你可以使用像regexpal這樣的正則表達式來測試你的表達式。