2 votes

JavaScript RegExp tous les caractères sauf les séries dynamiques

Je travaille donc sur un projet opensource afin d'étendre mes connaissances en JavaScript, et j'ai créé un utilitaire qui traite les chaînes de caractères de manière dynamique, et remplace des occurrences spécifiques par d'autres chaînes de caractères.

En voici un exemple :

jdhfkjhs${c1}kdfjh$%^%$S654sgdsjh${c20}SUYTDRF^%$&*#(Y

Et en supposant que je sélectionne le caractère '#', le RegExp le traite comme suit :

########${c1}####################${c20}###############

Le problème auquel je suis confronté est mon RegExp /[^\$\{c\d\}]/g correspond également à n'importe lequel des caractères à l'intérieur de la RegExp, de sorte qu'une chaîne de caractères telle que _,met$$$$$1234{}cccgg. sera renvoyée en tant que #####$$$$$1234{}ccc###

Existe-t-il un moyen d'attraper un tel groupe dynamique avec JavaScript, ou dois-je trouver un autre moyen de réaliser ce que je fais ?


Pour plus de détails, le code du projet peut être consulté à l'adresse suivante aquí .

1voto

Wiktor Stribiżew Points 100073

Vous pouvez faire correspondre le groupe et le capturer pour le restaurer ultérieurement, ou simplement faire correspondre n'importe quel caractère (avec . si aucun saut de ligne n'est prévu ou avec [^] / [\s\S] ) :

var rx = /(\${c\d+})|./g;
var str = 'jdhfkjhs\${c1}kdfjh\$%^%\$S654sgdsjh\${c20}SUYTDRF^%\$&*#(Y';
var result = str.replace(rx, function ($0,$1) {
  return $1 ? $1 : '#';
});
console.log(result);

Détails :

  • (\${c\d+}) - Groupe 1 : un littéral ${c puis 1+ chiffres et une chaîne de caractères littérale }
  • | - ou
  • . - n'importe quel caractère sauf un caractère de retour à la ligne (ou n'importe quel caractère si vous utilisez [^] o [\s\S] ).

Dans le cadre du remplacement, $0 se tient pendant toute la durée du match, $1 représente le contenu du premier groupe de capture. Si le $1 est défini, il est réinséré dans la chaîne résultante, sinon, le caractère est remplacé par # .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X