2009-06-17 9 views
4

je la chaîne suivante:JavaScript Handling Multiple Remplacer Matches

This *is* a *test*! 

Je veux en gras les mots entourés par les caractères * (donc « est » et « test » dans l'exemple).

je le code JavaScript suivant:

var data = "This *is* a *test*!"; 
return data.replace(/\*(.*)\*/g, <b>$1</b>); 

Lorsque la chaîne est retournée, je reçois le texte suivant:

This <b>is* a *test</b>! 

Comment puis-je modifier le motif ou le code de base afin de faire la remplacement comme je le veux?

Répondre

5

SO foiré avec mon HTML ...

var result = "This *is* a *test*!".replace(/\*(.*?)\*/gi, "<b>$1</b>"); 
+1

Vous n'avez pas vraiment besoin du modificateur 'i' dans cet exemple -'. * 'Correspond à n'importe quel majuscule ou minuscule, et' \ * 'n'est pas affecté par la casse. – redbmk

+0

Cela est beaucoup plus difficile à faire si le texte provient de l'utilisateur (et non du système), car éviter les attaques XSS signifie soit une aseptisation lourde de la liste blanche, soit une technique n'utilisant pas de chaînes HTML. API à la place). – robocat

2

Vous devez faire le motif non gourmand en ajoutant le -operator après *:

var data = "This *is* a *test*!"; 
return data.replace(/\*(.*?)\*/g, "<b>$1</b>"); 

est ici une référence pour JavaScript RegExp de Mozilla Developer Center.