Cómo pasar una expresión regular como un parámetro de función

Por qué esto devuelve falso en lugar de verdadero.

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
No funciona porque new RegExp no espera cadenas escritas con barras inclinadas; el primero y el último caracteres son parte del patrón literal de expresiones regulares.
agregado el autor apsillers, fuente

2 Respuestas

Porque cuando se crea una expresión regular con nuevo RegExp() , no se usan los delimitadores. Elimine el / de antes y después de la cadena.

Alternativamente, pase la expresión regular por sí mismo eliminando las comillas antes y después, y omita la nueva llamada RegExp() .

0
agregado

O formatee su expresión correctamente:

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

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

o pasa la expresión directamente:

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

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

1.


Las barras inclinadas (/) no son parte de la expresión, denotan un regex literal . Si usa una cadena que contiene la expresión, debe omitirlos y escapar de cada barra invertida, ya que la barra diagonal inversa también es el carácter de escape en las cadenas.

0
agregado
Como la barra diagonal inversa es un carácter de escape en cadenas, debe escapar de todas las barras diagonales inversas, por ejemplo, \\ w en lugar de \ w . Tendría un código mucho más limpio si acaba de proporcionar un objeto RegExp real en lugar de una cadena, como en la segunda opción en esta respuesta.
agregado el autor apsillers, fuente
Correcto, me olvidé de escapar de la barra diagonal inversa ... es por eso que evito usar expresiones regulares como cadenas;)
agregado el autor Felix Kling, fuente
@RegisteredUser: cuando tiene barras diagonales inversas en una cadena, debe escapar de ellas: jsfiddle.net/Guffa/hAV8Q/4
agregado el autor Guffa, fuente
JavaScript - Comunidad española
JavaScript - Comunidad española
4 de los participantes

Enlace para invitaciones: https://t.me/joinchat/B2gdShb3y7ojLekmhtDxIw En este grupo hablamos de JavaScript. Partner: es.switch-case.com