为什么这些javascript正则表达式会抛出语法错误?

为什么这些javascript正则表达式会抛出语法错误?,javascript,regex,Javascript,Regex,我试图在处理文本字符串之前将其验证为日期,但是我尝试过的两个正则表达式都抛出语法错误,我不明白为什么。据我所知,两者都没有错。以下是字符串: var datePattern1 = new RegExp( (0[1-9]|1[012])[-](0[1-9]|[12][0-9]|3[01])[-](19|20)\d\d ); 及 感谢您的帮助。您缺少表达式周围的引号: var datePattern1 = new RegExp( "(0[1-9]|1[012])[-](0[1-9]|[12][0

我试图在处理文本字符串之前将其验证为日期,但是我尝试过的两个正则表达式都抛出语法错误,我不明白为什么。据我所知,两者都没有错。以下是字符串:

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


感谢您的帮助。

您缺少表达式周围的引号:

var datePattern1 = new RegExp( "(0[1-9]|1[012])[-](0[1-9]|[12][0-9]|3[01])[-](19|20)\d\d" );
var datePattern2 = new RegExp( "[0-3][0-9]-(0|1)[0-9]-(19|20)[0-9]{2}" );

将字符串传递给darin提到的
RegExp
构造函数,或者使用RegExp语法“
/…/
”:

var datePattern1 = /(0[1-9]|1[012])[-](0[1-9]|[12][0-9]|3[01])[-](19|20)\d\d/;
var datePattern2 = /[0-3][0-9]-(0|1)[0-9]-(19|20)[0-9]{2}/;
Regexp()构造函数需要一个字符串,因此需要引用正则表达式:

var datePattern2 = new RegExp('[0-3][0-9]-(0|1)[0-9]-(19|20)[0-9]{2}');
使用双引号时,请注意正则表达式中的反斜杠转义。或者,您可以使用Perl语法:

var datePattern2 = /[0-3][0-9]-(0|1)[0-9]-(19|20)[0-9]{2}/;

真的这么简单吗?多诺,没那么简单。最后的\d\d必须是\\d\\d。如果使用perl语法,是否将变量传递给正则表达式构造函数?否。斜杠语法是“正则表达式文字”。无需在其周围创建正则表达式对象。
var datePattern2 = /[0-3][0-9]-(0|1)[0-9]-(19|20)[0-9]{2}/;