11
votes

Regex: ne correspondez pas si la chaîne contient des espaces

Je n'arrive pas à comprendre le motif de regex pour assortir des cordes uniquement s'il ne contient pas d'espace. Par exemple xxx

doit renvoyer nil mais xxx

doit renvoyer le matchdata avec la chaîne entière. Quelqu'un peut-il suggérer une solution pour ce qui précède?


2 commentaires

essayez-vous de déterminer si une chaîne contient des espaces blancheurs ou si une chaîne contient un certain motif, mais seulement s'il n'y a pas de blancheur?


Fondamentalement, je veux que la correspondance revienne nul si la chaîne contient des espaces blanche.


7 Réponses :


3
votes
>> "this has whitespace".match(/^\S*$/)
=> nil
>> "nospaces".match(/^\S*$/)
=> #<MatchData "nospaces">
^ = Beginning of string\S = non-whitespace character, * = 0 or more$ = end of string

0 commentaires

23
votes

dans Ruby, je pense que ce serait

/^\S*$/


6 commentaires

Ahh! Il manquait la fin de la ligne d'ancrage à la fin. À votre santé!


@Bart, note que \ n et \ r sont également considérés comme des caractères d'espace blanc.


Vous voudrez peut-être / \ a \ s * \ z / au lieu de cela, car cela correspondra au début et à la fin de la chaîne plutôt que le début et la fin des lignes. "LINEONE \ NLINETWO" correspondant à / ^ \ s * $ / retournera "LineOne"


Je n'aurai pas à vous soucier des chaînes multilignes dans mon application, mais c'est un excellent point - merci.


Qu'en est-il / ^ \ s * $ / m, où M tourne un mode multiligne? :)


Cela m'a sauvé une jolie expression régulière étrange pour PHP et JavaScript. Dans ce cas, je devais tout faire correspondre si cela n'avait pas eu de blousiastes ou ne correspondait que les premiers 1-3 caractères non-espaces. C'est le résultat: / ^ (?: (\ S {1,5}) \ s * | (. {1,3}). *) $ / . C'est moche, je sais. Et il nécessite la chaîne de remplacement '$ 1 $ 2' , mais cela fonctionne bien pour le but!



1
votes
   "nowhitespace".match(/^[^\s]*$/)

0 commentaires

1
votes

Vous voulez:

/^\S*$/


0 commentaires

3
votes

Je ne sais pas que vous pouvez le faire dans un motif, mais vous pouvez faire quelque chose comme: xxx


1 commentaires

+1 Pour penser à la question différemment ... La question pourrait être interprétée comme une chaîne contenant un modèle «X» tant que la chaîne n'inclut pas les espaces ...



0
votes

str.match (/ ^ \ s * quelque_pattern \ s * $ /)


0 commentaires

4
votes

Vous pouvez toujours rechercher pour les espaces , an, puis nier le résultat: xxx


0 commentaires