118 votes

Comment ignorer les espaces dans une chaîne de sujet d'expression régulière?

Existe-t-il un moyen simple d'ignorer les espaces dans une chaîne cible lors de la recherche de correspondances à l'aide d'un modèle d'expression régulière? Par exemple, si ma recherche porte sur "chats", je voudrais que "c ats" ou "ca ts" corresponde. Je ne peux pas supprimer les espaces au préalable car je dois trouver les index de début et de fin de la correspondance (y compris les espaces) pour mettre en surbrillance cette correspondance et tous les espaces doivent être présents à des fins de formatage.

136voto

Sam Dufel Points 10154

Vous pouvez insérer des caractères d'espacement optionnels \s* entre tous les autres caractères de votre expression rationnelle. Bien que accordé, cela deviendra un peu long.

/cats/ -> /c\s*a\s*t\s*s/

9voto

Aurimas Points 63

L'adressage de Steven commentaire Sam Dufel réponse

Merci, on dirait que c'est le chemin à parcourir. Mais je viens de réaliser que je ne veux l'option espaces si elles suivent un retour à la ligne. Ainsi, par exemple, "c\n ats" ou "ca\n ts" doit correspondre. Mais ne veux pas de "c ats" match si il n'y a pas de saut de ligne. Toutes les idées sur la façon dont cela pourrait être fait?

Ceci devrait faire l'affaire:

/c(?:\n\s*)?a(?:\n\s*)?t(?:\n\s*)?s/

Voir cette page pour toutes les variantes de "chats" qui correspond.

Vous pouvez également résoudre ce à l'aide des instructions conditionnelles, mais ils ne sont pas pris en charge dans le javascript saveur de regex.

6voto

Kludge Points 80

Vous pouvez mettre \s* entre chaque caractère de votre chaîne de recherche. Ainsi, si vous recherchez un chat, vous utiliseriez c\s*a\s*t\s*s\s*s

C'est long mais vous pouvez bien sûr construire la chaîne de manière dynamique.

Vous pouvez le voir fonctionner ici: http://www.rubular.com/r/zzWwvppSpE

4voto

Tim Pietzcker Points 146308

Si vous voulez seulement laisser des espaces, alors

 \bc *a *t *s\b
 

devrait le faire. Pour autoriser également les onglets, utilisez

 \bc[ \t]*a[ \t]*t[ \t]*s\b
 

Supprimez les ancres \b si vous souhaitez également rechercher cats dans des mots tels que bobcats ou catsup .

1voto

Pif Points 141

Je crois que la réponse facile est le mode Espacement libre .

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