2011-10-10 29 views
8

sé que puedo crear un javascript reemplazar así:JavaScript crear expresiones regulares mediante programación

str = str.replace(/mytarget/g, 'some value');

que sustituirá todas las ocurrencias del literal mytarget. Sin embargo, tengo una gran variedad de palabras/frases que quiero usar en regex replace, y como las expresiones regulares son solo elementos de lenguaje (no se envuelven en una cadena al declarar), no puedo encontrar una forma de declarar expresiones regulares programáticamente a menos que los codifique. Así que si tengo:

var arr=['word', 'another', 'hello'];

quiero producir:

str = str.replace(/word/g, 'some value');

str = str.replace(/another/g, 'some value');

str = str.replace(/hello/g, 'some value');

Por favor, publique un ejemplo que puedo usar expresiones regulares, como lo Estaré agregando más expresiones a las expresiones regulares como espacios en blanco, etc. así que NECESITO el modo de expresión regular. Por último, no ofrezcas el uso de eval, estoy seguro de que hay una mejor manera.

+0

¿Por qué utiliza expresiones regulares? Simplemente haga un simple [reemplazo de cadena] (https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/replace). – Quentin

+0

y el patrón de reemplazo simplemente es una expresión regular con los motivos que he explicado anteriormente. –

Respuesta

13

Necesita invocar la función del constructor RegExp para eso. Ejemplo:

['word', 'another', 'hello'].forEach(function(word) { 
    var myExp = new RegExp(word, 'g'); 
    str = str.replace(myExp, 'some value'); 
}); 

El primer argumento para el constructor es una cadena, que, literalmente, toma algo que le envuelva entre medio //. El segundo parametro es también la cadena, donde se puede pasar como modificadores g, i, etc.

0

Si va a generar la reg-exp sobre la marcha, se puede utilizar el objeto RegExp

var a = new RegExp("word") 
3

Se puede construir una expresión regular dinámicamente como esto -

var word = 'hello'; 
var re = new RegExp("\\b" + word + "\\b","g"); 

recuerde que usted debe escapar de cualquier \ caracteres usando \\

2
for(i in arr) 
{ 
    str = str.replace(new RegExp("\\"+arr[i],"g"), "some value") 
} 
Cuestiones relacionadas