2010-01-29 6 views
1

J'essaye d'analyser un balisage de type Wiki en utilisant the Javascript Creole Wiki Markup Parser. Je tente d'étendre l'analyseur pour analyser des balises div comme ceci:Analyser le balisage Wiki en Javascript en utilisant regex

Markup: < < any_content_here < <
HTML: <div class="left">content</div>

Markup: >> any_content_here >>
HTML: <div class="right">content</div>

Markup: ^^ ^^ any_content_here
HTML: <div class="horz">content</div>

L'analyseur utilise des expressions régulières pour analyser le balisage, mais regex n'est certainement pas mon point fort, et comme le fichier js n'a pratiquement aucun commentaire, je trouve qu'il est particulièrement difficile à éditer. J'ai posté sur le blog du gars demandant de l'aide avec cela, mais comme le poste a environ 2 ans, je ne m'attends pas à entendre de sitôt ...

Une aide pour personnaliser cette, ou si quelqu'un pouvait signaler un analyseur javascript qui prend déjà en charge div, il serait le plus apprécié.

Répondre

1

Si vous ne vous souciez pas de l'imbrication, vous n'avez même pas besoin d'une regex. Il suffit de remplacer "<<" par "<div class='left'>" et ainsi de suite. Pour permettre l'imbrication, vous devez (1) modifier le balisage afin que la fin soit différente du début (par exemple <L> contenu </L>) et (2) exécuter une expression régulière autant de fois qu'il y a de niveaux. Le regex (pour la div gauche) serait:

<L>(((?!</?L>).)*)</L> 

Et la chaîne de remplacement:

<div class="left">$1</div> 

est ici une fonction qui se chargera de l'analyse syntaxique tous les niveaux:

function parseLeft(markup) { 
    var regex = /<L>(((?!<\/?L>).)*)<\/L>/g; 
    out = markup.replace(regex, '<div class="left">$1</div>'); 
    if (out.length == markup.length) { 
    return out; 
    } else { 
    return parseLeft(out); 
    } 
} 

Exemple en action:

> parseLeft('<L> Outer div <L>inner div</L>outer again </L>'); 
<div class="left"> Outer div <div class="left">inner div</div>outer again </div> 
Questions connexes