RegExp.test无法正常工作?

时间:2011-07-22 17:25:38

标签: javascript regex

我试图在javascript中使用Regex.test验证年份,但无法弄清楚为什么返回false。

var regEx = new RegExp("^(19|20)[\d]{2,2}$"); 
输入值1981,2007

regEx.test(inputValue)返回false

由于

4 个答案:

答案 0 :(得分:23)

当您使用字符串表达式创建RegExp对象时,需要将反斜杠加倍,以便它们正确转义。同样[\d]{2,2}可以简化为\d\d

var regEx = new RegExp("^(19|20)\\d\\d$");

或者更好的是使用正则表达式文字来避免加倍反斜杠:

var regEx = /^(19|20)\d\d$/;

答案 1 :(得分:6)

找到 REAL 问题:

更改声明以删除引号:

var regEx = new RegExp(/^(19|20)[\d]{2,2}$/); 

答案 2 :(得分:3)

你的意思是

var inputValue = "1981, 2007";

如果是这样,这将失败,因为由于起始字符串(^)和结束字符串($)字符,模式不匹配。

如果要捕获这两年,请从模式中删除这些字符并进行全局匹配(使用/ g)

var regEx = new RegExp(/(?:19|20)\d{2}/g);
var inputValue = "1981, 2007";
var matches = inputValue.match(regEx);

匹配将是一个包含所有匹配项的数组。

答案 3 :(得分:1)

我注意到,由于我无法解释的原因,有时你必须在d前面有两个\。

所以试试[\\ d],看看是否有帮助。