JavaScript“匹配”不匹配

时间:2012-06-30 11:15:17

标签: javascript regex

我的代码如下所示

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');

regexp的目的是检查字符串是否包含任何日期。但它从未找到任何日期。我使用在线regexp工具测试了regexp。

2 个答案:

答案 0 :(得分:1)

如果您要查找whether a string contains any dates,那么在开始时^ $并不会有帮助 - 因为它们表示匹配开头和结尾< em> of string 。

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

<击>

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

<击>

更新

Anton已经找到了解决方案 - 但是,虽然上述解决方案比原始解决方案更好,但它仍然不正确,因为\d需要转义(到\\d)才能它包含在引号内时可以工作。所以应该是...

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

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

答案 1 :(得分:0)

我做了@Utkanos说并使用了/ pattern / -syntax而不是像这样

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

然后它起作用了:)

相关问题