JavaScript正则表达式空白

JavaScript正则表达式空白,javascript,regex,Javascript,Regex,例如,运行以下JavaScript代码可以成功找到“12月12日” 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)字符)

例如,运行以下JavaScript代码可以成功找到“12月12日”

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日”,因此查找该字符串不应成为问题


有什么想法吗?

[1-31]{1,2}
与您想要的不匹配。它相当于
[1-3]{1,2}


使用正则表达式工具测试表达式,如。

[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
周围加括号也没有必要

更具体地说,您还可以明确说明月份:


(?:(?:一月|二月|一月|三月|四月|五月|六月|七月|八月|)(?:(?:九月|十一月|十二月|十二月|十月|)ber)

与您的问题不太相关,但刚刚测试过,
“32”。匹配(/[1-31]{1,2})/code>返回
[“32”
,因此您可能需要重新考虑您的正则表达式。。。