J'ai un tableau d'expressions régulières, au moment juste un élément de longueur, et une chaîne que je veux rechercher/remplacer par une boucle à travers le tableau:Utilisation de la fonction anonyme dans la méthode String.replace()
var str = "i am*happy all the*time",
rex = [
/(\S)\s*\*\s*(\S)/g
],
i = 0,
r = rex.length;
Voilà comment je suis en train de réaliser ce au moment:
for (i; i < r; i += 1) {
str.replace(rex[i], function(star, p1, p2) {
console.log(i, star, p1, p2);
return p1 + '\\s*(.*)\\s*' + p2;
});
}
le résultat devrait être i am*\\s*(.*)\\s*happy all the\\s*(.*)\\s*time
. Mais pour l'instant, str
ne semble pas affecté, même si je vérifie la console les correspondances pertinentes sont en cours. Vous pouvez le voir par vous-même here.
Donc, est-ce que je manque quelque chose de simple, ai-je mal compris quelque chose sur l'utilisation des expressions lambda dans String.replace(), ou y a-t-il quelque chose de plus fondamentalement faux ici?
...
INFO EXTRA: J'utilise Chrome 24 en ce moment, dans le cas qui est d'intérêt; J'avais lu il y a quelque temps que les fonctions anonymes dans String.replace() n'étaient pas disponibles pour tous les navigateurs bien que je supposais que cela serait résolu maintenant (l'option a été introduite dans ECMAScript v3).
Les chaînes JS sont immuables et la fonction * renvoie * une nouvelle chaîne. – Bergi
Btw, au lieu de cette fonction, vous pouvez simplement utiliser '" $ 1 \\ s * (. *) \\ s * $ 2 "' – Bergi
@Bergi Merci. Était conscient de l'alternative de chaîne, mais je joue avec des fonctions plus compliquées. Je voulais juste avoir les bases en premier. – guypursey