2013-06-13 15 views
5

Sto utilizzando una libreria JavaScript molto fine chiamata "array-query" da Jacob Wright per eseguire ricerche in matrici di oggetti.Converti una stringa in un'espressione regolare

Un metodo è regex() in cui è possibile includere un'espressione regolare tra parentesi come questa: regex(/[^\w\s]/). Se registro l'espressione come ho appena mostrato, funziona bene. Se metto la stessa espressione in una variabile prima non funziona, in questo modo:

var reg = "/[^\w\s]/"; 
regex(reg); 

mi è stato detto

Si sta mettendo le virgolette attorno al regex, che lo rende una stringa. Rimuovi le virgolette.

Così

var reg = /[^\w\s]/; 
regex(reg); 

funziona bene.

Problema è necessario accettare l'input dell'utente da una casella di testo come parte dell'espressione regolare. Ad esempio, se l'utente digita nella lettera z, deve essere modificato in /z/. Anche se digito /z/ il textbox.value restituito ha lo stesso problema di var reg = "/z/". Se ho hardcode var reg = /z/; regex(reg); funziona bene.

Come rendere un valore di casella di testo di input di "z" in un modulo che è var reg = z;? Molte molte grazie per qualsiasi aiuto o idea, spero che questo non sia troppo confuso.

+3

Qui: http://stackoverflow.com/questions/874709/converting-user-input-string-to-regular-expression – mzedeler

+0

Questo come stato chiesto prima , dai un'occhiata al link mzedeler pubblicato. Raccomando anche di leggere alcuni documenti sulle espressioni regolari in JavaScript: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions. –

risposta

4

Si dovrebbe fare

var regex = new RegExp('your regex string'); 

Fondamentalmente si può pensare

var regex = /pattern/modifiers; 

come

var regex = new RegExp(pattern,modifiers); 

Per saperne di più su di esso a: MDN o w3schools

2
var reg = new RegExp("string"); 
-3

Si può fare qualcosa di simile:

var string = $('#input_id').val(); 
string = string.replace('/', ''); 

var regexpPattern = '/'+string+'/'; 
regex(regexpPattern); 
+2

'regex' si aspetta un oggetto RegExp, non una stringa. –

+1

Questo è molto sbagliato. '"/foo/"' è una stringa, mentre '/ foo /' è una regex letterale. L'OP ha persino menzionato che nella domanda, l'hai letto? –

+0

Non ho incluso virgolette doppie. Ho appena concatinato le barre con il testo che vengono catturate tramite la casella di input. Hai letto attentamente il mio codice? – skparwal