2009-07-31 30 views
16

Tengo el siguiente código, que funciona, pero necesito inyectar algunas cosas diferentes en el objeto de expresión regular (regex2) en tiempo de ejecución. Sin embargo, text.replace no parece gustarle a un objeto de cadena para la expresión regular, entonces ¿cómo puedo hacer que esto funcione?Javascript String.replace con expresiones regulares dinámicas?

var regex2 = /\|\d+:\d+/; 
document.write("result = " + text.replace(regex2, '') + "<br>"); 
+0

cambio stringObj de cadena. Si es una cadena, ya es un objeto, también conocido como máquina de cajero automático, número de PIN, etc. –

+0

¿Debe realizarse la llamada .replace() dentro de la llamada a document.write()? ¿No podría asignar ese valor antes de llamar a document.write? Parece que eso resolvería el problema (a menos que no entienda tu pregunta correctamente). – inkedmn

+0

Soy el compañero de trabajo de Alex. El stringObj fue solo para dejar en claro lo que estábamos haciendo, no el código real. –

Respuesta

52

Usted puede hacer un objeto de expresión regular de una cadena utilizando la función RegExp constructor:

var regExp = new RegExp(myString); // regex pattern string 

text.replace(regExp, ''); 
+24

Merece la pena señalar: * myString * es la expresión regular con ningún marcador de inicio y fin, es decir, no "/ foo [123] /", pero "foo [123]". – BlaM

20

adición a la CMS: El constructor RegExp tiene una segunda banderas de parámetros opcionales
(15.10.4 The RegExp Constructor)

var text = "This is a Test."; 

var myRegExp = new RegExp('teST','i'); 

text.replace(myRegExp,'Example'); 
// -> "This is a Example." 

como Banderas puedes ver t

  • g -> búsqueda global (todas las apariciones)
  • i -> entre mayúsculas y minúsculas
  • m -> multilínea
+1

Tienes que construir la cadena de forma dinámica y luego suministrar las banderas en el segundo parámetro. new RegExp ("^" + dynamic + "+ |" + dynamic + "+ $", "g"). –

4
var value = "2012-09-10"; 
value = value.replace(/([0-9]{4})[\/-]([0-9]{2})[\/-]([0-9]{2})/,"$3/$2/$1"); 
alert(value); 

esto mostrará

10/09/2012 
0

puede usar eval to,

new RegExp(eval("/"+str+"/i")); 

bye ...

+3

Esto parece inútil propenso a errores. – Ryan

+2

La evaluación no es necesaria. – jdhildeb

+0

También crea dos instancias 'RegExp' cuando solo se necesita una. –

Cuestiones relacionadas