2016-11-27 10 views
-1

JavaScriptで文字列で日付を検索したいと思います。例:正規表現の検索文字列を

string.search(dateReg); 

次に、見つかった日付を示します。

http://regexr.com/3eoib)に本当に素晴らしい正規表現が見つかりました。文字列:27.11.または27.11.2016で動作しますが、abcde 27.11.2016 fghi(結果:-1)では機能しません。

日付の前後にこれらの文字があるため、正規表現で日付が見つかりません:/。私は2時間のためのグーグルではなく、angeser(正規表現を正しい方法を変更する方法を発見していない)。私は基底正規表現を見ましたが、私は答えを見つけることができません:/。

誰かが文字列から日付をフィルタリングする方法を知っていますか?

ありがとう:-)。

+0

は27-11-2016またはちょうど2016年11月27日に似た日付と一致するようにしようとしていますか? – Ibrahim

+2

これを読む:http://stackoverflow.com/questions/5978510/regex-to-match-date – MYGz

答えて

1

同じコードを試してもかまいませんが、$と^は正規表現の単語境界\bに置き換えてください。コードは次のようになります。

(?:(?:31(\/|-|\.)(?:0?[13578]|1[02]))\1|(?:(?:29|30)(\/|-|\.)(?:0?[1,3-9]|1[0-2])\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})(?=\W)|\b(?:29(\/|-|\.)0?2\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])?|(?:(?:16|[2468][048]|[3579][26])00)?)))(?=\W)|\b(?:0?[1-9]|1\d|2[0-8])(\/|-|\.)(?:(?:0?[1-9])|(?:1[0-2]))(\4)?(?:(?:1[6-9]|[2-9]\d)?\d{2})?(?=\b) 

を上記のコードは一致します。

30/04/2016

31/05/2016

しかし、それはしませんが一致:

31/04/2016

32/05/2016

、それはそれの前/後の文字列を持っている任意の日付と一致します:

ABCDE を2016年11月27日

デモ:https://regex101.com/r/Hs2sjW/5

更新:

前のコードにはいくつか問題がある可能性があります。これを行う最善の方法は、最初に日付パターンをチェックしてから、日付の有効性をチェックすることです。次に、あなたの正規表現で日付の有効性を確認

\d{2}[-.\/]\d{2}(?:[-.\/]\d{2}(\d{2})?)? 

:日付パターンを確認する最初の正規表現は、このようなものである可能性があります。ここで働くのjavascriptです:

var myString = "Test 22/10/20 Test"; //Could be any String 
 
var myRegexp = /\d{2}[-.\/]\d{2}(?:[-.\/]\d{2}(\d{2})?)?/g; //Check pattern only 
 
var validDate = /(?:(?:31(\/|-|\.)(?:0?[13578]|1[02]))\1|(?:(?:29|30)(\/|-|\.)(?:0?[1,3-9]|1[0-2])\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:29(\/|-|\.)0?2\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])?|(?:(?:16|[2468][048]|[3579][26])00)?)))$|^(?:0?[1-9]|1\d|2[0-8])(\/|-|\.)(?:(?:0?[1-9])|(?:1[0-2]))(\4)?(?:(?:1[6-9]|[2-9]\d)?\d{2})?$/g; //Check the validity of the date 
 
myString = myRegexp.exec(myString) 
 
myString = validDate.exec(myString[0]) 
 
console.log(myString[0])

+0

ありがとう!それはまさに私が探していたものです。 –

+0

@ SliniElf大歓迎です。 – Ibrahim

+0

日付パターンと一致させることと、妥当性をチェックする別の方法があります。私は2つを組み合わせることをお勧めしません。 2015年2月29日を前提とすると、上記の正規表現は "29/2 /"と一致します。また、有効な日付である2000年29月2日です。パターンを最初に '/ \ d {1,2} \/\ d {1,2} \/\ d {4} /'のようなものにマッチさせる方がはるかに簡単であると思われます。とにかく日付が必要であることを確認するための第2ステップと思われます。 – RobG

0

私はこれがあなたを助けてくれることを願っています!

/(\d{1,2}[\.\/]){2,2}(\d{2,4})?/g 
関連する問題