2009-06-11 9 views
4

Y a-t-il un moyen facile de de changer le cas d'une chaîne de caractères avec javascript?Javascript replace() avec case-change

Exemple

Chaîne: <li>something</li>

Regex: /<([\w]+)[^>]*>.*?<\/\1>/

Et ce que je voudrais faire est de remplacer le match 1 $ à toutes les lettres majuscules (dans le remplacer si possible). Je ne suis pas tout à fait sûr quand $ 1 est une correspondance valide et pas une chaîne - '$ 1'.toUpperCase ne fonctionne pas.

Alors, comment pourrais-je faire pour retourner <LI>something</li>? La méthode, pas la regex.

Répondre

12

Vous pouvez remplacer la méthode de remplacement par une fonction de remplacement. Le premier argument pour lequel est le match entier, la seconde sera de 1 $. Ainsi:

mystring.replace(/<([\w]+)[^>]*>.*?<\/\1>/, function(a,x){ 
    return a.replace(x,x.toUpperCase()); 
}) 

bien que cette forme permet d'économiser l'opération supplémentaire en faisant une capture supplémentaire (devrait être plus rapide, mais ne sont pas vérifiées):

mystring.replace(/<([\w]+)([^>]*>.*?<\/\1>)/, function(a,x,y){ 
    return ('<'+x.toUpperCase()+y); 
}) 
+0

Parfait :) Merci! –

0

est plus facile probablement utiliser un match de regex puis utilisez .toUpperCase sur la correspondance. J'ai légèrement modifié la regex pour ajouter un deuxième groupe de capture

var str = '<li>something</li>'; 
var arr = /<([\w]+)([^>]*>.*?<\/)\1>/.exec(str); 
str = '<' + arr[1].toUpperCase() + arr[2] + arr[1].toUpperCase() + '>'; 
Questions connexes