2010-12-02 1 views
3

J'essaie de répliquer l'éditeur de Markdown WMD. J'ai essayé de modifier ADM au lieu de réinventer la roue, mais son code est illisible pour moi ...Besoin d'aide pour analyser la suppression, supprimer l'italique (*) mais pas gras (**)

Je suis en train de permettre la suppression de l'italique « * » mais pas gras « ** »

Ainsi, le italique ci-dessous doivent être retirés

this *is a* test 
this ***is a*** test 

Mais le soufflet doit être intacte

this **is a** test 

Je suppose que je devrais utiliser RegExp mais comment? Comment puis-je correspondre à la * que si son « seul » ou est suivie par 2 ou plus * s

Répondre

2

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/

+0

C'est ce que j'étais sur le point de regarder ... :) +1 – alex

+0

Pour le dernier 1, il devrait supprimer 1 astérisques de chaque côté seulement –

+0

ah ... cela fonctionne -> http: // jsfiddle .net/QKNam/1 / –

Questions connexes