¿Hay alguna diferencia entre usar new RegExp("regex");
y /same_regex/
para probar contra una cadena de destino? Estoy haciendo esta pregunta porque obtuve un resultado de validación diferente mientras uso estos dos enfoques. Aquí está el fragmento he usado para validar un campo de correo electrónico:¿Cuál es la diferencia entre Usar RegExp y Usar la notación de barra oblicua para probar contra Cadena?
var email="[email protected]@foo.com";
var regex1 = new RegExp("^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$");
var regex2 = /^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/;
//using RegExp object
if(regex1.test(email)) {
console.log("email matched regex1");
} else {
console.log("email mismatched regex1");
}
//using slash notation
if(regex2.test(email)) {
console.log("email matched regex2");
} else {
console.log("email mismatched regex2");
}
me dieron dos resultados inconsistentes:
email matched regex1 email mismatched regex2
Me pregunto si hay alguna diferencia aquí o que omite algo en este ejemplo concreto?
Para un ejemplo ejecutable por favor refiérase a here
En la notación de barra inclinada '\' y '/' fuera de la definición de la clase char también deben escaparse. –
@Philipp: Sí a '/' pero no a la barra invertida. –