-2
votes

Chaîne donnée Comment puis-je remplacer certaines mots avec plusieurs mots dans un tableau?

Disons que j'ai une phrase et un éventail de mots: xxx

Comment puis-je remplacer chaque astérisque (*) avec le mot approprié dans le tableau donné? Mais disons également qu'il y a de cas où il y a plus d'astérisques que des éléments de la matrice: xxx

utilise regex le seul moyen de résoudre ce problème ou existe-t-il une solution JS vanilla?


3 commentaires

Avez-vous essayé quelque chose du tout? Oui, il est possible avec Vanilla JS.


Regex est intégré à JS, donc c'est Vanilla JS. Quelle solution avez-vous proposé qui utilise regex? Il peut être possible de le réutiliser afin qu'il n'utilise pas regex.


À l'avenir, veuillez ne pas ajouter de balises aux questions qui ne correspondent pas à votre question. J'ai supprimé la balise de programmation fonctionnelle, car cela n'a rien à voir avec la programmation fonctionnelle. Vous pouvez survoler une balise pour obtenir une brève description de ce que c'est à propos. Comprenez que de nombreux utilisateurs réguliers du site suivent certaines tags, et nous pouvons obtenir un peu de grincheux sur les questions qui ne sont pas gernées à nos intérêts. Deuxièmement, et beaucoup moins important encore, les regexnes sont vanilla js :)


5 Réponses :


0
votes

let sentence = 'My * is * years old.';
let words = ['dog', 3];
let count =0;
while (sentence.indexOf('*') > -1) {
    sentence = sentence.replace('*', words[count++]);
    if (count >= words.length) count = 0;
}
console.log(sentence);


0 commentaires

3
votes

Vous pouvez prendre une fonction de remplacement avec une valeur supplémentaire pour l'index de démarrage, qui a une valeur par défaut de zéro.

pour garder l'index dans une plage valide, vous pouvez prendre le Opérateur de reste % code> avec le Longueur de la matrice. p>

p>

const
    replace = (string, array, i = 0) =>
        string.replace(/\*/g, _=> array[i++ % array.length]);

console.log(replace('My * is * years old.', ['dog', 3]));
console.log(replace('The soldiers marched *, *, *, *.', ['left', 'right']));


1 commentaires

Je pensais à un départ avec un décalage pour l'index. (à côté de la déclaration et d'initialiser une variable nécessaire.)



0
votes

Si vous n'aimez vraiment pas les expressions régulières, vous pouvez le faire:

init  | "The soldiers marched *, *, *, *."
split | ["The soldiers marched ", ", ", ", ", ", ", "."]
i = 0 | ["The soldiers marched ", ", ", ", ", ", ", "."]
i = 1 | ["The soldiers marched ", "left, ", ", ", ", ", "."]
i = 2 | ["The soldiers marched ", "left, ", "right, ", ", ", "."]
i = 3 | ["The soldiers marched ", "left, ", "right, ", "left, ", "."]
i = 4 | ["The soldiers marched ", "left, ", "right, ", "left, ", "right."]
join  | "The soldiers marched left, right, left, right."


0 commentaires

0
votes

Une autre option libre REGEXP: xxx pré> xxx pré>

méfiez-vous du code malveillant cependant: p>

> | f(["L", "R"])
< | "", alert("VIRUS ATTACK!!! CALL +XX-XXXXX-XXXXX NOW!!!"), "The soldiers marched L, R, L, R."


0 commentaires

0
votes

Un caractère après l'autre:

p>

abc = ["A", "B", "C"]
for (i = 0; i < 2 * abc.length; i++) {
  // j will never reach abc.length
  j = i % abc.length; // 0, 1, 2, 0, ...
  console.log(i, j, abc[j]);
}


0 commentaires