0

运行以下 JavaScript 代码会成功找到例如“12 December”。

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 日”,因此找到它应该不是问题。

有任何想法吗?

4

2 回答 2

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)

于 2013-01-11T08:39:39.517 回答
0

[1-31]{1,2}不会符合你想要的。它相当于[1-3]{1,2}

你可以使用像regexpal这样的正则表达式工具来测试你的表达式。

于 2013-01-11T08:39:26.287 回答