我正在回答一个问题,以下内容会返回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
为什么会这样?
答案 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+");