为什么正则表达式构造函数不起作用?

时间:2014-03-31 07:02:29

标签: javascript regex

我正在回答一个问题,以下内容会返回false

var regexp = new RegExp("([\w\.-]+)@((?:[\w]+\.)+)([a-zA-Z]{2,4})");
var result = regexp.test( $("#email").val() ); // returns false

虽然

var regexp = /([\w\.-]+)@((?:[\w]+\.)+)([a-zA-Z]{2,4})/;
var result = regexp.test( $("#email").val() ); // returns true

为什么会这样?

1 个答案:

答案 0 :(得分:6)

使用\构造函数时,需要转义RegExp

new RegExp("([\\w\\.-]+)@((?:[\\w]+\\.)+)([a-zA-Z]{2,4})");

引自MDN's RegExp constructor Docs

  

使用构造函数时,需要使用普通的字符串转义规则(前面带有\的特殊字符,当包含在字符串中时)。例如,以下内容是等效的:

var re = /\w+/;
var re = new RegExp("\\w+");