如何将正则表达式作为函数参数传递

Reg*_*ser 4 javascript regex

为什么这会返回false而不是true.

function doit(expression) {

    var regex = new RegExp(expression, 'g');

    alert(regex.test('mename@memail.com'));
}

doit("/^\w+([-+.\']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/");
?
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/hAV8Q/

Fel*_*ing 14

正确格式化表达式:

function doit(expression) {
    var regex = new RegExp(expression, 'g');
    alert(regex.test('mename@memail.com'));
}

doit("^\\w+([-+.\\']\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*");
// no / here, escape \
Run Code Online (Sandbox Code Playgroud)

或直接传递表达式:

function doit(expression) {
    alert(expression.test('mename@memail.com'));
}

doit(/^\w+([-+.\']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/g);
Run Code Online (Sandbox Code Playgroud)


斜杠(/)不是表达式的一部分,它们表示正则表达式文字.如果使用包含表达式的字符串,则必须省略它们并转义每个反斜杠,因为反斜杠也是字符串中的转义字符.

  • 因为反斜杠是字符串中的转义字符,所以你需要转义所有的反斜杠,例如`\\ w`而不是`\ w`.如果您只提供了一个实际的RegExp对象而不是字符串,那么您将拥有更清晰的代码,如本答案中的第二个选项所示. (2认同)