Cela est difficile à résoudre avec regexp droit, la manipulation notamment de cas où les astérisques sont au début ou à la fin de la chaîne . Le mélange magie regexp avec un peu de magie remplacer fait le travail bien ...
function removeItalics(str) {
var re = /\*+/g;
return str.replace(re, function(match, index) { return match.length === 2 ? '**' : ''; });
}
alert(removeItalics("this *is a* test")); // this is a test
alert(removeItalics("this **is a** test")); // this **is a** test
alert(removeItalics("this ***is a*** test")); // this is a test
Nous correspondant à court d'un ou plusieurs astérisques. Les matchs sont gourmands. Donc, la plus longue série d'astérisques sera jumelée. Si la longueur du match est de 2, on remet les astérisques, sinon on les dépouille.
Exemple de travail est ici: http://jsfiddle.net/QKNam/
MISE À JOUR: Si vous voulez garder en gras si vous avez 2 ou plusieurs astérisques, il suffit de changer la logique de match.length comme ça ...
function removeItalics(str) {
var re = /\*+/g;
return str.replace(re, function(match, index) { return match.length === 1 ? '' : '**'; });
}
alert(removeItalics("this *is a* test")); // this is a test
alert(removeItalics("this **is a** test")); // this **is a** test
alert(removeItalics("this ***is a*** test")); // this **is a** test
Mise à jour jsFiddle: http://jsfiddle.net/QKNam/3/
C'est ce que j'étais sur le point de regarder ... :) +1 – alex
Pour le dernier 1, il devrait supprimer 1 astérisques de chaque côté seulement –
ah ... cela fonctionne -> http: // jsfiddle .net/QKNam/1 / –