0

我的代码如下所示

var html = $(el).html().toString();
html = '2012-05-10';
var re = new RegExp('^(19|20)\d\d[- /.](0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])$');
var m = re.exec(html);
if (m != null)
alert('match');
else
alert('nomatch');

正则表达式的目的是检查字符串是否包含任何日期。但是它从来没有找到任何日期。我已经使用在线正则表达式工具测试了正则表达式。

4

2 回答 2

1

如果您试图找到whether a string contains any dates,那么^在开头并$没有帮助 - 因为它们表示匹配字符串的开头和结尾。

要在包含其他文本(甚至空格)的字符串中查找日期,请使用此...

var re = new RegExp('(19|20)\d\d[- /.](0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])');

更新

Anton 已经想出了一个解决方案 - 然而,虽然上述解决方案比原来的解决方案更好,但它仍然不正确,因为\d需要转义 (to \\d) 才能使其在包含在引号中时工作。因此,它应该是...

var re = new RegExp('(19|20)\\d\\d[- /.](0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])');

但是,事后看来,我同意所有其他人的观点,因为它不是动态模式,所以最好的解决方案是使用/pattern/语法

于 2012-06-30T11:21:05.150 回答
0

我按照@Utkanos 所说的那样做,并像这样使用 /pattern/-syntax

if (/(19|20)\d\d[- /.](0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])/.test(html))

然后它起作用了:)

于 2012-06-30T11:33:01.643 回答