Convertir una cadena de entrada del usuario en una expresión regular

Resuelto Gordon Gustafson asked hace 15 años • 15 respuestas

Estoy diseñando un probador de expresiones regulares en HTML y JavaScript. El usuario ingresará una expresión regular, una cadena y elegirá la función con la que desea probar (por ejemplo, buscar, comparar, reemplazar, etc.) mediante un botón de opción y el programa mostrará los resultados cuando esa función se ejecute con los argumentos especificados. Naturalmente, habrá cuadros de texto adicionales para reemplazar los argumentos adicionales y demás.

Mi problema es obtener la cadena del usuario y convertirla en una expresión regular. Si digo que no necesitan tener //alrededor de la expresión regular que ingresan, entonces no pueden establecer indicadores, como gy i. Entonces tienen que tener //'s alrededor de la expresión, pero ¿cómo puedo convertir esa cadena en una expresión regular? No puede ser un literal ya que es una cadena, y no puedo pasarlo al constructor RegExp ya que no es una cadena sin //'s. ¿Hay alguna otra forma de convertir una cadena de entrada del usuario en una expresión regular? ¿Tendré que analizar la cadena y los indicadores de la expresión regular con //luego construirlos de otra manera? ¿Debería hacerles ingresar una cadena y luego ingresar las banderas por separado?

Gordon Gustafson avatar May 17 '09 21:05 Gordon Gustafson
Aceptado

Utilice el constructor de objetos RegExp para crear una expresión regular a partir de una cadena:

var re = new RegExp("a|b", "i");
// same as
var re = /a|b/i;
Gumbo avatar May 17 '2009 14:05 Gumbo
var flags = inputstring.replace(/.*\/([gimy]*)$/, '$1');
var pattern = inputstring.replace(new RegExp('^/(.*?)/'+flags+'$'), '$1');
var regex = new RegExp(pattern, flags);

o

var match = inputstring.match(new RegExp('^/(.*?)/([gimy]*)$'));
// sanity check here
var regex = new RegExp(match[1], match[2]);
Anonymous avatar May 17 '2009 14:05 Anonymous