367 votes

Conversion de la chaîne entrée par l’utilisateur d’expression régulière

Je suis en train de concevoir une expression régulière testeur en html et en javascript. L'utilisateur va entrer dans une regex, une chaîne de caractères, et de choisir la fonction qu'ils veulent pour faire des tests (par exemple, recherche, match, remplacer, etc. ) via radio bouton et le programme va afficher les résultats lorsque cette fonction est exécutée avec les arguments spécifiés. Naturellement, il y aura supplémentaire zones de texte pour les arguments supplémentaires pour remplacer, par exemple.

Mon problème est l'obtention de la chaîne de l'utilisateur et de la transformer en une expression régulière. Si je dis qu'ils n'ont pas besoin d'avoir /de /autour de la regex ils entrent, alors ils ne peuvent pas définir des indicateurs, comme le g et je. Donc, ils ont le /de /autour de l'expression, mais comment puis-je convertir la chaîne regex? Il ne peut pas être un littéral depuis sa une chaîne de caractères, et je ne peux pas la passer au constructeur RegExp puisque ce n'est pas une chaîne de caractères sans les //'. Est-il un autre moyen pour rendre un utilisateur de la chaîne d'entrée dans une regex? Vais-je avoir à analyser la chaîne et les drapeaux de la regex avec la / / de /pour la construction d'une autre façon? Devrais-je entrer une chaîne de caractères, puis entrez les drapeaux séparément? Merci les gars!

PS j'ai aussi remarqué que lors de l'obtention de la valeur d'un champ texte, vous devez utiliser la zone de texte.valeur et pas de zone de texte.getAttribute("valeur"). Est-ce parce que le XML getAttribute est à la recherche d'un attribut dans le code, et ne pas obtenir le réel de l'utilisateur à la valeur entrée de la zone de texte?

647voto

Gumbo Points 279147

Utilisez le constructeur de l’objet RegExp pour créer une expression régulière d’une chaîne :

73voto

Anonymous Points 8757
<pre><code></code><p>ou</p><pre><code></code></pre></pre>

16voto

Ayman Hourieh Points 39435

Utilisez le constructeur de l’objet JavaScript RegExp.

Vous pouvez passer les drapeaux comme une seconde chaîne argument au constructeur. Consultez la documentation pour plus de détails.

11voto

staabm Points 395

Dans mon cas le somethimes d’entrée de l’utilisateur était entouré par des délimiteurs et parfois pas. C’est pourquoi j’ai ajouté une autre affaire...

3voto

Stephan202 Points 27707

Je vous suggère également d'ajouter séparés des cases à cocher ou un champ de texte spéciaux pour les drapeaux. De cette façon, il est clair que l'utilisateur n'a pas besoin d'ajouter //'. Dans le cas d'un remplacement, fournir deux objets textfield. Cela rendra votre vie beaucoup plus facile.

Pourquoi? Parce que sinon, certains utilisateurs d'ajouter //'s, tandis que d'autres ne le seront pas. Et certains vont faire une erreur de syntaxe. Puis, après avoir dépouillé l' //s', vous pouvez vous retrouver avec un syntaxiquement valide regex qui ne ressemble en rien à ce que l'utilisateur prévu, conduisant à un comportement étrange (à partir de la perspective de l'utilisateur).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X