Existe-t-il un moyen simple d'ignorer l'espace blanc 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 l'index de début et de fin de la correspondance (y compris les espaces) afin de mettre en évidence cette correspondance et tout espace doit être là à des fins de formatage.
regex
whitespace
Steven
la source
la source
^([a-z]\s*)+$
Répondre au commentaire de Steven à la réponse de Sam Dufel
Cela devrait faire l'affaire:
Voir cette page pour toutes les différentes variantes de «chats» que cela correspond.
Vous pouvez également résoudre ce problème en utilisant des conditions , mais elles ne sont pas prises en charge dans la version javascript de regex.
la source
new RegExp('cats'.split('').join('(?:\n\s*)?'))
Bien que la réponse acceptée soit techniquement correcte, une approche plus pratique, si possible, consiste simplement à supprimer les espaces à la fois de l'expression régulière et de la chaîne de recherche.
Si vous souhaitez rechercher "mes chats", au lieu de:
Faites simplement:
Avertissement: Vous ne pouvez pas automatiser cela sur l'expression régulière en remplaçant simplement tous les espaces par des chaînes vides, car ils peuvent se produire dans une négation ou rendre votre expression régulière invalide.
la source
Vous pouvez mettre
\s*
entre chaque caractère dans votre chaîne de recherche, donc si vous cherchez un chat, vous utiliseriezc\s*a\s*t\s*s\s*s
C'est long mais vous pouvez bien sûr construire la chaîne dynamiquement.
Vous pouvez le voir fonctionner ici: http://www.rubular.com/r/zzWwvppSpE
la source
Si vous souhaitez uniquement autoriser les espaces, alors
devrait le faire. Pour autoriser également les onglets, utilisez
Supprimez les
\b
ancres si vous souhaitez également rechercher descats
mots tels quebobcats
oucatsup
.la source
Cette approche peut être utilisée pour automatiser cela (l'exemple de solution suivant est en python, bien qu'il puisse évidemment être porté dans n'importe quel langage):
vous pouvez supprimer les espaces au préalable ET enregistrer les positions des caractères autres que des espaces afin de pouvoir les utiliser plus tard pour connaître les positions des limites de chaîne correspondantes dans la chaîne d'origine comme suit:
Si vous voulez aller plus loin, vous pouvez construire l'objet de correspondance et le renvoyer à la place, de sorte que l'utilisation de cet assistant sera plus pratique.
Et les performances de cette fonction peuvent bien sûr également être optimisées, cet exemple est juste pour montrer le chemin vers une solution.
la source