字符串中的正则表达式搜索日期

时间:2016-11-27 02:43:06

标签: javascript regex

我想用javascript在字符串中搜索日期。例如:

string.search(dateReg);

然后,显示我找到它的日期。

我在(here)找到了一个非常好的正则表达式。它适用于我的字符串:27.11.27.11.2016,但它不适用于abcde 27.11.2016 fghi(结果:-1)。

正则表达式无法找到日期,因为日期前后的这些字符:/。我用谷歌搜索了2个小时,但没有找到一个anwser(如何以正确的方式改变正则表达式?)。我也查看了基础正则表达式,但我找不到答案:/。

有人知道如何过滤字符串中的日期吗?

谢谢: - )。

2 个答案:

答案 0 :(得分: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 27.11.2016

演示:https://regex101.com/r/Hs2sjW/5

<强>更新

以前的代码可能存在一些问题。执行此操作的最佳方法是首先检查日期模式,然后检查日期的有效性。检查日期模式的第一个正则表达式可能是这样的:

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

然后用正则表达式检查日期的有效性。这是一个有效的javascript:

&#13;
&#13;
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])
&#13;
&#13;
&#13;

答案 1 :(得分:0)

我希望这可以帮到你!

/(\d{1,2}[\.\/]){2,2}(\d{2,4})?/g