2011-03-02 20 views
42

Estoy tratando de crear algo similar a esto:Javascript nueva expresión regular de la cadena

var regexp_loc = /e/i; 

excepto que yo quiero la expresión regular a depender de una cadena, así que traté de usar la nueva expresión regular, pero no pude conseguir Lo que quería.

Básicamente quiero que e en la expresión regular anterior sea una variable de cadena pero fallo con la sintaxis.

que hemos probado algo como esto:

var keyword = "something"; 

var test_regexp = new RegExp("/" + keyword + "/i"); 

Básicamente quiero buscar una cadena secundaria en una cadena grande que reemplazar la cadena con alguna otra cadena, entre mayúsculas y minúsculas.

cordiales, Alexander

Respuesta

56

lo necesario para aprobar el second parameter:

var r = new RegExp(keyword, "i"); 

También tendrá que escapar los caracteres especiales en la cadena para evitar ataques de inyección de expresiones regulares.

+1

Gracias, pensé que necesitaba las barras de apertura y cierre. (> _ <) –

+1

¿Cómo paso varias banderas como i y g? He estado intentando esto desde hace mucho tiempo. Intenté "ig" pero solo g funciona. Intenté "i, g" pero no es válido. Intenté ["i", "g"] pero no es válido. ¿Cómo? – Tarun

11

Al utilizar el constructor RegExp, no necesita las barras como lo hace al usar un literal regexp. Entonces:

new RegExp(keyword, "i"); 

Tenga en cuenta que pasa los indicadores en el segundo parámetro. Vea here para más información.

+0

jaja, desearía haber visto esto antes de pasar una hora quitándome el pelo. Gracias James! – 1mike12

31

También debe recordar tener cuidado con los caracteres de escape dentro de una cadena ...

Por ejemplo si hubiese deseado para detectar un número de un solo \ d {1} y que hizo esto ...

var pattern = "\d{1}"; 
var re = new RegExp(pattern); 

re.exec("1"); // fail! :(

que fracasaría como el inicial \ es un carácter de escape, que tendría que "escapar de la fuga", al igual que ...

var pattern = "\\d{1}" // <-- spot the extra '\' 
var re = new RegExp(pattern); 

re.exec("1"); // success! :D 
+1

Me cortó el doble escape al usar una cuerda para crear un patrón. Estoy contento de haber encontrado esto. – Pete

+0

Una cosa más que me hizo tropezar, la versión de cadena del patrón que se alimenta al objeto RegExp no funcionará si comienzas y finalizas con "/". Una expresión regular en js podría ser var pattern =/\ d {1} /, no se necesitan citas, pero una vez que se convierta en cadena, se convertiría en var patternString = "\\ d {1}", como Ric lo tiene en su ejemplo. – 1mike12

+0

Horas intentando hacer funcionar ese RegExp, y finalmente una respuesta increíble. El error fue que me estaba olvidando \\ al principio, solo estaba usando uno. – Fusseldieb

0

palabra clave var = "algo";

var test_regexp = new RegExp(something,"i"); 
Cuestiones relacionadas