2013-02-23 3 views
0

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).

+2

Les chaînes JS sont immuables et la fonction * renvoie * une nouvelle chaîne. – Bergi

+1

Btw, au lieu de cette fonction, vous pouvez simplement utiliser '" $ 1 \\ s * (. *) \\ s * $ 2 "' – Bergi

+0

@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

Répondre

1

String.replace() ne modifie pas la chaîne d'origine, mais renvoie la nouvelle. Vous devez affecter le résultat

for (i; i < r; i += 1) { 
    str = str.replace(rex[i], function(star, p1, p2) {...}) 
} 
+0

Si simple. Je pense que le livre de référence que j'ai rejeté comme dans aucun des exemples est un résultat assigné à une variable. Merci. – guypursey

Questions connexes