运行以下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日”,因此找到它不应该是问题。
有什么想法吗?
答案 0 :(得分:1)
[1-31]
不是“1到31之间的数字”的有效正则表达式。所有这一切都接受了1,2,3,11,22,23,23,31,33中的任何1,2,3和(用量词)中的任何一个。
相反,它应该是(?:3[01]|[1-2][0-9]|[0-9])
此外,将括号括在\s
附近是不可靠的。
更具体地说,您还可以明确说明几个月的情况:
(?:(?:jan|febr)uary|march|april|may|june|july|august|(?:(?:sept|nov|dec)em|octo)ber)
答案 1 :(得分:0)
[1-31]{1,2}
与您想要的不符。它相当于[1-3]{1,2}
。
使用像regexpal这样的正则表达式工具来测试你的表达式。