2009-11-08 16 views
25

C'è un modo per passare una variabile in un'espressione regolare in jQuery/Javascript?Come passare una variabile in regex in jQuery/Javascript

voglio fare qualcosa di simile:

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

some_string.match(/variable_regex/); 

In Ruby si sarebbe in grado di fare:

some_string.match(/#{variable_regex}/)

trovato un post utile:

How can I concatenate regex literals in JavaScript?

+0

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

risposta

17

E 'facile:

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

some_string.match(variable_regex); 

solo perdere il //. Se si desidera utilizzare espressioni regolari complesse, è possibile utilizzare la concatenazione di stringhe: [? Come si usa una variabile in un'espressione regolare]

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

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

Avevo una regex complessa e volevo interpolare un pattern variabile in un'espressione hardcoded, ma suppongo che avrei impostato ogni permutazione di espressione regolare su un'intera variabile. –

+2

Non penso che sia possibile applicare le opzioni regex con questa versione (globale, senza distinzione tra maiuscole e minuscole, ad esempio). Direi che la risposta di @ Jonathan è più appropriata di questa. – nzifnab

+0

Funziona anche solo con la corrispondenza. Altre chiamate, come la sostituzione, richiedono la costruzione esplicita della regex. – bronson

44

Javascript non supporta l'interpol zione come Ruby - è necessario utilizzare l'RegExp costruttore:

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

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

Nel caso in cui vogliamo applicare le opzioni regex, possiamo fare: new Regex (pattern, 'gi') per global, case insensitive. – Mike

+0

Il commento di @Mike deve essere corretto. Dovrebbe essere 'new RegExp (pattern [, flags])' non solo ** Regex ** –

+1

ES2015 supporta l'interpolazione di espressioni nelle stringhe di template. –

Problemi correlati