Convertir una cadena de entrada del usuario en una expresión regular
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 g
y 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?
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;
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]);