2009-11-08 13 views
25

¿Hay alguna forma de pasar una variable a una expresión regular en jQuery/Javascript?Cómo pasar una variable a la expresión regular en jQuery/Javascript

lo que quiero hacer algo como:

var variable_regex = "bar"; 
var some_string = "foobar"; 

some_string.match(/variable_regex/); 

en Ruby que sería capaz de hacer:

some_string.match(/#{variable_regex}/)

Ha encontrado un post útil:

How can I concatenate regex literals in JavaScript?

+0

duplicados de (https://stackoverflow.com/questions/494035/how- do-you-use-a-variable-in-a-regular-expression) –

Respuesta

17

Es fácil:

var variable_regex = "bar"; 
var some_string = "foobar"; 

some_string.match(variable_regex); 

acaba de perder la //. Si desea utilizar expresiones regulares complejas, puede utilizar concatenación de cadenas: [? ¿Cómo se utiliza una variable en una expresión regular]

var variable_regex = "b."; 
var some_string = "foobar"; 

alert (some_string.match("f.*"+variable_regex)); 
+1

Tenía una expresión regular compleja y quería interpolar un patrón variable en una expresión codificada, pero supongo que simplemente establecería cada permutación de expresiones regex a una variable completa. –

+2

No creo que pueda aplicar las opciones de expresión regular con esta versión (global, sin distinción de mayúsculas y minúsculas, por ejemplo). Yo diría que @ la respuesta de Jonathan es más apropiada que esta. – nzifnab

+0

También solo funciona con el partido. Otras llamadas, como reemplazar, requieren construir la expresión regular de forma explícita. – bronson

44

Javascript no admite interpol ación como Ruby - usted tiene que utilizar el RegExp constructor:

var aString = "foobar"; 
var pattern = "bar"; 

var matches = aString.match(new RegExp(pattern)); 
+6

En el caso de que deseemos aplicar opciones de expresión regular, podemos hacer: new Regex (patrón, 'gi') para global, sin distinción de mayúsculas y minúsculas. – Mike

+0

El comentario de @Mike debe ser corregido. Debe ser 'nuevo RegExp (patrón [, indicadores])' no solo ** Regex ** –

+1

ES2015 admite la interpolación de expresiones en cadenas de plantillas. –

Cuestiones relacionadas