1
votes

Regex exclut les caractères au début et à la fin

J' j'essaie de sélectionner tout [a-z ',] symboles mais excluez les virgules au début et à la fin. Conservez uniquement la sélection à l'intérieur du rect rouge. Comment puis-je faire ceci? entrez la description de l'image ici


4 commentaires

Utilisez des lookarounds.


Il y a des virgules que je voudrais garder dans le rect. Je ne sais pas comment faire ça.


Merci @ Mandy8055


Vous pouvez suivre ce lien: stackoverflow.com/questions/43538558/...


3 Réponses :


3
votes

Je pense que ce que vous voulez, c'est un groupe de capture facultatif qui se répète zéro fois ou plus:

[a-z](?:[',]*[a-z]+)*

Voir le Démo en ligne

  • [a-z] - Un caractère dans la plage a-z.
  • (?: - Ouvrir un groupe sans capture.
    • [',] * - Zéro ou plus de caractères de la classe de caractères spécifiée.
    • [a-z] + - Au moins un caractère dans la plage a-z.
    • ) * - Fermez le groupe non capturant et faites-le correspondre zéro ou plusieurs fois.

 entrez la description de l'image ici

Remarque: Si, pour de bonnes raisons, l'intention d'OP était de correspondre une citation à la toute fin, nous pouvons ajouter une apostrophe optionnelle: [az] (?: [',] * [az] +'?) * . Voir une démo


1 commentaires

Voilà la solution!



1
votes

Vous pouvez d'abord remplacer les virgules en question et sélectionner ensuite les caractères souhaités:

let string = `,,."?!tats,t'ats,t,s',l,f,%$,`;

string = string.replace(/^,|,$/g, "~ooo~");
console.log(string);

Dans d'autres langues, vous pouvez utiliser des lookarounds (une recherche négative et une anticipation positive, c'est-à-dire).


1 commentaires

@ F.Vosnim: Vous pouvez choisir tout ce que vous voulez, cela ne doit se produire qu'une seule fois. Par exemple. les caractères ~ ooo ~ fonctionneraient également.



1
votes

Vous pouvez faire correspondre l'expression régulière suivante.

[a-z']      : match one character in character class
(?:         : begin non-capture group
  [a-z',]*  : match 0+ characters in character class
  [a-z']    : match one character in character class
)           : end non-capture group
?           : optionally match non-capture group

Démarrez votre moteur!

Le moteur d'expression régulière de Javascript effectue les opérations suivantes.

[a-z'](?:[a-z',]*[a-z'])?


0 commentaires