8
votes

Regex pour correspondre au dernier caractère spatial

J'ai besoin d'aide. Je cherche une regex qui correspondrait au dernier caractère spatial d'une chaîne. J'utilise JavaScript et ASP classique.

J'ai une longue chaîne de texte que je coupe à 100 caractères. Je voudrais retirer le dernier caractère pour éviter une erreur d'orthographe si la garniture coupe un mot en raison de la limite de 100 caractères. P>

regex.replace(/[ ]$.*?/ig, '');


1 commentaires

Peut-être auriez-vous dû être plus précis sur ce que vous recherchez. "Faites correspondre tout depuis le dernier espace jusqu'à la fin" irait mieux.


5 Réponses :


2
votes

Le regex /^.+ [^] * $ / ne correspondra que le dernier espace d'une ligne.


2 commentaires

Non, cela correspondra à la ligne entière, plus ou moins.


Oui, mais cela précise pour le dernier espace, désolé, je n'étais pas spécifique. Un groupe de capture bien placé vous donnera ce que vous voulez basé sur cela.



11
votes

Essayez un Assertion Lookahead :

/\s(?=\S*$)/


5 commentaires

@Gumbo: Est-ce que je manque quelque chose ou est-ce inutilement compliqué?


@ DCLOWD9901: C'est juste une pratique. Plus vous l'utilisez le plus souvent, plus vous obtenez.


@Tomalak: Eh bien, cela correspond exactement au dernier caractère spatial d'une chaîne et rien d'autre.


Ah, j'ai manqué quelque chose d'essentiel, alors. :) beau travail, +1.


Merci @gumbo, grande regex



4
votes

ce serait xxx

caractère d'espace ( ), au moins une fois ( + ), à la fin de la ligne ( $ )

Notez que la mise en place de l'espace dans une classe de caractères est inutile, sauf si vous souhaitez correspondre à plus qu'un caractère d'espace, par exemple des onglets [\ t] .

correspondre vraiment à la dernier espace uniquement, utilisez / $ /

edit : Pour couper tout après le dernier espace (en pensant à cela, c'est ce que vous réellement semble vouloir, vous pouvez utiliser: xxx

Lorsque la regex signifie: "Au moins un espace, et tout caractères non-blancs après elle ( \ s * ), à la fin de la ligne ( $ ). ".

Ceci ne peut correspondre que le dernier bit d'une ligne après le dernier espace. En tant qu'effet secondaire, la chaîne est coupée à la fin.


1 commentaires

Cela vous aide à faire correspondre tous les caractères d'une chaîne après le dernier espace. Comment puis-je utiliser ceci pour correspondre à tous les caractères d'une chaîne avant le dernier espace? Merci!



29
votes

De ma compréhension, vous devez supprimer le dernier espace et tout après cela, non?

 str = str.replace(/\s+\S*$/, "")


2 commentaires

Parfait, merci stéréofrogrog exactement ce dont j'avais besoin


Heureux d'entendre ça marche, mais gumbo a raison - la prochaine fois, essayez d'être plus précis



0
votes

à l'aide de "classique" res, ce que vous voudriez serait "[^] * $" - c'est-à-dire un caractère d'espace suivi d'un nombre arbitraire de caractères non spatiaux suivis de la fin. de la ligne. Les "caractères non-espaces" peuvent ou non adapté à votre définition d'un "mot", par exemple, cela vous empêchera également de couper un nombre au milieu. Si vous souhaitez limiter un "mot" à contenir des lettres, vous pouvez utiliser: "[^ a-za-z] * $" à la place.

Notez également que de toute façon, si un mot arrive à se terminer exactement au 100e caractère, cela correspondra à l'espace avant de cela. Vous allez donc supprimer ce dernier mot. Si vous voulez éviter cela, vous voulez (probablement) regarder le premier caractère que vous coupez, et s'il s'agit de l'espace blanc, ne vous enlève rien du tampon.


0 commentaires