2013-06-13 4 views
5

J'utilise une très belle bibliothèque JavaScript appelée "array-query" par Jacob Wright pour effectuer des recherches dans des tableaux d'objets. Une méthode est regex() où une expression régulière peut être incluse entre parenthèses comme ceci: regex(/[^\w\s]/). Si je code en dur l'expression comme je viens de le montrer, cela fonctionne bien. Si je mets la même expression dans une variable d'abord il ne fonctionne pas, comme ceci:Convertir une chaîne en une expression régulière

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

On m'a dit

Vous mettez des guillemets autour de votre regex, ce qui en fait une chaîne. Enlever les citations.

Ainsi

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

fonctionne très bien.

Le problème est que je dois accepter l'entrée d'utilisateur d'une zone de texte dans le cadre de l'expression régulière. Par exemple, si l'utilisateur tape la lettre z, elle doit être remplacée par /z/. Même si je tape /z/ le textbox.value retourné a le même problème en tant que var reg = "/z/". Si je code en dur var reg = /z/; regex(reg); cela fonctionne bien. Comment faire pour entrer une valeur de zone de saisie de "z" dans un formulaire var reg = z;? Un grand merci pour toute aide ou des idées, espérons que ce n'est pas trop confus.

+3

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

+0

Ce comme cela a été demandé avant , jetez un oeil sur le lien mzedeler posté. Je recommande également de lire de la documentation sur les expressions régulières en JavaScript: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions. –

Répondre

4

Vous devriez faire

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

Fondamentalement, vous pouvez penser à

var regex = /pattern/modifiers; 

comme

var regex = new RegExp(pattern,modifiers); 

En savoir plus sur à l'adresse: MDN ou w3schools

-3

Vous pouvez faire quelque chose comme ceci:

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

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

'regex' attend un objet RegExp, pas une chaîne. –

+1

C'est très faux. '"/foo/"' est une chaîne, alors que '/ foo /' est un littéral regex. Le PO a même mentionné cela dans la question, l'avez-vous lu? –

+0

Je n'ai pas inclus de guillemets. Je viens de concaténer les barres obliques avec le texte qui sont capturées via la boîte de saisie. Avez-vous lu mon code attentivement? – skparwal

Questions connexes