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?
3 Réponses :
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. 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
Voilà la solution!
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).
@ 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.
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'])?
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/...