Saltar al contenido

Javascript Regex: ¿Cómo poner una variable dentro de una expresión regular?

Solución:

const regex = new RegExp(`ReGeX${testVar}ReGeX`);
...
string.replace(regex, "replacement");

Actualizar

Según algunos de los comentarios, es importante tener en cuenta que es posible que desee escapar del variable si existe la posibilidad de contenido malicioso (por ejemplo, la variable proviene de la entrada del usuario)

Actualización de ES6

En 2019, esto generalmente se escribiría usando una cadena de plantilla, y el código anterior se ha actualizado. La respuesta original fue:

var regex = new RegExp("ReGeX" + testVar + "ReGeX");
...
string.replace(regex, "replacement");

Puede utilizar el objeto RegExp:

var regexstring = "whatever";
var regexp = new RegExp(regexstring, "gi");
var str = "whateverTest";
var str2 = str.replace(regexp, "other");
document.write(str2);

Entonces puedes construir regexstring de la forma que quieras.

Puedes leer más sobre esto aquí.

Para construir una expresión regular a partir de una variable en JavaScript, necesitará usar el RegExp constructor con un parámetro de cadena.

function reg(input) {
    var flags;
    //could be any combination of 'g', 'i', and 'm'
    flags="g";
    return new RegExp('ReGeX' + input + 'ReGeX', flags);
}

por supuesto, este es un ejemplo muy ingenuo. Asume que input se ha escapado correctamente para una expresión regular. Si está tratando con la entrada del usuario, o simplemente desea que sea más conveniente hacer coincidir caracteres especiales, deberá escapar de los caracteres especiales:

function regexEscape(str) {
    return str.replace(/[-/\^$*+?.()|[]{}]/g, '\$&')
}

function reg(input) {
    var flags;
    //could be any combination of 'g', 'i', and 'm'
    flags="g";
    input = regexEscape(input);
    return new RegExp('ReGeX' + input + 'ReGeX', flags);
}
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *