Saltar al contenido

Utilice una cadena dinámica (variable) como patrón de expresiones regulares en JavaScript

Solución:

Para crear la expresión regular a partir de una cadena, debe usar JavaScript RegExp objeto.

Si también desea hacer coincidir / reemplazar más de una vez, entonces deber añade el g (coincidencia global) bandera. He aquí un ejemplo:

var stringToGoIntoTheRegex = "abc";
var regex = new RegExp("#" + stringToGoIntoTheRegex + "#", "g");
// at this point, the line above is the same as: var regex = /#abc#/g;

var input = "Hello this is #abc# some #abc# stuff.";
var output = input.replace(regex, "!!");
alert(output); // Hello this is !! some !! stuff.

Demostración de JSFiddle aquí.

En el caso general, escape la cadena antes de usarla como expresión regular:

Sin embargo, no todas las cadenas son expresiones regulares válidas: hay algunos caracteres especiales, como ( o [. Para solucionar este problema, simplemente escape la cadena antes de convertirla en una expresión regular. Una función de utilidad para eso va en el siguiente ejemplo:

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

var stringToGoIntoTheRegex = escapeRegExp("abc"); // this is the only change from above
var regex = new RegExp("#" + stringToGoIntoTheRegex + "#", "g");
// at this point, the line above is the same as: var regex = /#abc#/g;

var input = "Hello this is #abc# some #abc# stuff.";
var output = input.replace(regex, "!!");
alert(output); // Hello this is !! some !! stuff.

Demostración de JSFiddle aquí.


Nota: la expresión regular en la pregunta usa la s modificador, que no existía en el momento de la pregunta, pero existe — a s (dotall) marca / modificador en JavaScript – hoy.

Si está intentando utilizar un valor de variable en la expresión, debe utilizar el “constructor” de RegExp.

var regex="(?!(?:[^<]+>|[^>]+</a>))b(" + value + ")b";
new RegExp(regex, "is")

No necesitas el " para definir una expresión regular tan solo:

var regex = /(?!(?:[^<]+>|[^>]+</a>))b(value)b/is; // this is valid syntax

Si value es una variable y desea una expresión regular dinámica, entonces no puede usar esta notación; use la notación alternativa.

String.replace también acepta cadenas como entrada, por lo que puede hacer "fox".replace("fox", "bear");

Alternativa:

var regex = new RegExp("/(?!(?:[^<]+>|[^>]+</a>))b(value)b/", "is");
var regex = new RegExp("/(?!(?:[^<]+>|[^>]+</a>))b(" + value + ")b/", "is");
var regex = new RegExp("/(?!(?:[^<]+>|[^>]+</a>))b(.*?)b/", "is");

Tenga en cuenta que si value contiene caracteres de expresiones regulares como (, [ y ? tendrás que escapar de ellos.

¡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 *