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];

これは一致を返さなかっただけでなく、コードも正常に実行されませんでした。私も次のことを試しました(2番目の(\ s)文字だけ)、それも実行されませんでした:

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

2 番目 (\s) が機能しない理由はありますか? 最初の (\s) は、最初の空白と正常に一致します。検索文字列 100% には文字列 "12 December 2012" が含まれているため、検索は問題になりません。

何か案は?

4

2 に答える 2

1

[1-31] is not the valid regex for "a number between 1 and 31". All it does is accept any of 1, 2, 3 and (with the quantifier) any of 11, 12, 13, 21, 22, 23, 31, 32, 33.

Instead, it should be (?:3[01]|[1-2][0-9]|[0-9])

Also, it is unnessecary to put parentheses around the \s.

To be more specific, you could also explicity state what months are with:

(?:(?: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 に答える