7
votes

Remplacer un entier (N) avec un caractère répété n fois

Disons que j'ai une chaîne: xxx pré>

... que je voudrais me transformer en: p> xxx pré>

essentiellement remplaçant un Integer avec des occurrences répétées de # code> équivalent à la valeur entière. Comment puis-je atteindre cela? P>

Je comprends que les rafraîchissements peuvent être utilisés avec str.replace () code> p> xxx pré>

et que Nous pouvons utiliser str.repeat (n) code> pour répéter les séquences de chaîne n code> fois. p>

mais comment puis-je utiliser la brouillon de .replace () code> comme argument de .repeat () code>? Par exemple, cela ne fonctionne pas: P>

str.replace(/([0-9])/g,"#".repeat("$1"))


1 commentaires

/ (x) \ 1 / correspond à "xx" où \ 1 est une référence arrière. "1 $ 1" n'est pas une référence arrière, il s'agit d'un modèle de remplacement spécial.


4 Réponses :


7
votes
"__3_".replace(/\d/, match => "#".repeat(+match))

3 commentaires

En fait, vous n'avez pas besoin du + .


@ryeeballar en fait vous faites. Sinon 11 remplacerait par ## au lieu de ########### , etc. Attendez cependant je viens de regarder L'édition, où + correspond a été remplacé par correspondant . Mais le REGEXP doit être remplacé par / \ d + / g


@PatrickRoberts sur REGEXP - Possible oui ou non - je ne suis pas sûr quelle logique est nécessaire



6
votes

Essayez ceci:

p>

var str = "__3_";

str = str.replace(/[0-9]+/, function(x) {
      
  return '#'.repeat(x);
});

alert(str);


1 commentaires

Merci pour la réponse, malheureusement, @Vasiliy a répondu un peu plus tôt.



0
votes

Essayez ceci:

var str = "__3_";
str = str.replace(/[0-9]/g,function(a){
    var characterToReplace= '#';
    return characterToReplace.repeat(a)
});


0 commentaires

2
votes

Approche à l'ancienne:

"__3__".replace(/\d/, function (x) {
  return Array(+x + 1).join('#');
});


0 commentaires