Como passar uma expressão regular como um parâmetro de função

Por que isso retorna falso em vez de verdadeiro.

function doit(expression) {

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

    alert(regex.test('[email protected]'));
}

doit("/^\w+([-+.\']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/");
​

http://jsfiddle.net/hAV8Q/

0
Não funciona porque o new RegExp não espera que strings sejam marcadas com barras; o primeiro e o último caractere fazem parte do padrão literal regex.
adicionado o autor apsillers, fonte

2 Respostas

Porque ao criar um regex com new RegExp() , você não usa os delimitadores. Remova o / de antes e depois da string.

Alternativamente, passe o próprio regex removendo as aspas antes e depois, e deixe de fora a chamada new RegExp() .

0
adicionado

Formate sua expressão corretamente:

function doit(expression) {
    var regex = new RegExp(expression, 'g');
    alert(regex.test('[email protected]'));
}

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

ou passar a expressão diretamente:

function doit(expression) {
    alert(expression.test('[email protected]'));
}

doit(/^\w+([-+.\']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/g);

Detalhes


As barras (/) não fazem parte da expressão, elas denotam um regex literal . Se você usar uma string contendo a expressão, você terá que omiti-las e escapar de todas as barras invertidas, já que a barra invertida é o caractere de escape das strings.

0
adicionado
Como a barra invertida é um caractere de escape em strings, você precisa escapar de todas as barras invertidas, por exemplo, \\ w em vez de \ w . Você teria um código muito mais limpo se apenas fornecesse um objeto RegExp real em vez de uma string, como na segunda opção desta resposta.
adicionado o autor apsillers, fonte
Certo, eu esqueci de escapar da barra invertida ... é por isso que evito usar o regex como strings;)
adicionado o autor Felix Kling, fonte
@RegisteredUser: Quando você tem backslashes em uma string, você tem que escapar deles: jsfiddle.net/Guffa/hAV8Q/4
adicionado o autor Guffa, fonte
JavaScript Brasil OFICIAL
JavaScript Brasil OFICIAL
4 138 dos participantes

Grupo sobre JavaScript do Brasil