La classe WikiParser inclut des méthodes qui convertissent le texte d’entrée Wiki en sortie HTML équivalente. Il ne s’agit pas d’une application de conversion Wiki très puissante, mais elle illustre des utilisations d’expressions régulières pour la mise en correspondance de modèle et la conversion de chaîne.
La fonction constructeur et la méthode
setWikiData()
initialisent un exemple de chaîne de texte d’entrée Wiki, comme suit :
public function WikiParser()
{
wikiData = setWikiData();
}
Lorsque l’utilisateur clique sur le bouton de test dans l’application exemple, cette dernière appelle la méthode
parseWikiString()
de l’objet WikiParser. Cette méthode appelle plusieurs autres méthodes, qui assemblent à leur tour la chaîne HTML résultante.
public function parseWikiString(wikiString:String):String
{
var result:String = parseBold(wikiString);
result = parseItalic(result);
result = linesToParagraphs(result);
result = parseBullets(result);
return result;
}
Chaque méthode appelée—
parseBold()
,
parseItalic()
,
linesToParagraphs()
, et
parseBullets()
—utilise la méthode
replace()
de la chaîne pour remplacer les modèles de correspondance, définis par une expression régulière, de façon à transformer le texte Wiki en texte formaté HTML.
Conversion des modèles de texte en gras et en italique
La méthode
parseBold()
recherche un modèle de texte Wiki en gras (
'''foo'''
, par exemple) et le transforme en son équivalent HTML (
<b>foo</b>
, par exemple), comme suit :
private function parseBold(input:String):String
{
var pattern:RegExp = /'''(.*?)'''/g;
return input.replace(pattern, "<b>$1</b>");
}
Notez que la portion
(.?*)
de l’expression régulière correspond à des caractères (
*
) entre les deux modèles de définition
'''
. Le quantificateur
?
rend la correspondance nongreedy, de façon à ce que pour une chaîne telle que
'''aaa''' bbb '''ccc'''
, la première chaîne mise en correspondance soit
'''aaa'''
et non la chaîne entière (qui commence et se termine par le modèle
'''
).
Les parenthèses dans l’expression régulière définissent un groupe capturé, et la méthode
replace()
se réfère à ce groupe en utilisant le code
$1
dans la chaîne de remplacement. L’indicateur
g
(
global
) dans l’expression régulière vérifie que la méthode
replace()
remplace toutes les correspondances dans la chaîne (pas simplement la première).
La méthode
parseItalic()
fonctionne comme la méthode
parseBold()
, sauf qu’elle recherche deux apostrophes (
''
) comme séparateur pour le texte en italique (au lieu de trois) :
private function parseItalic(input:String):String
{
var pattern:RegExp = /''(.*?)''/g;
return input.replace(pattern, "<i>$1</i>");
}
Conversion de modèles de puce
Comme dans l’exemple suivant, la méthode
parseBullet()
recherche le modèle de puce Wiki (
* foo
, par exemple) et le transforme en son équivalent HTML (
<li>foo</li>
, par exemple) :
private function parseBullets(input:String):String
{
var pattern:RegExp = /^\*(.*)/gm;
return input.replace(pattern, "<li>$1</li>");
}
Le symbole
^
au début de l’expression régulière correspond au début d’une ligne. L’indicateur
m
(
multiline
) dans l’expression régulière fait en sorte que cette dernière compare le symbole
^
au début d’une ligne, et non simplement au début de la chaîne.
Le modèle
\*
correspond à un astérisque (la barre oblique est utilisée pour signaler un astérisque littéral au lieu d’un quantificateur
*
).
Les parenthèses dans l’expression régulière définissent un groupe capturé, et la méthode
replace()
se réfère à ce groupe en utilisant le code
$1
dans la chaîne de remplacement. L’indicateur
g
(
global
) dans l’expression régulière vérifie que la méthode
replace()
remplace toutes les correspondances dans la chaîne (pas simplement la première).
Conversion de modèles Wiki de paragraphe
La méthode
linesToParagraphs()
convertit chaque ligne dans la chaîne Wiki d’entrée en une balise de paragraphe HTML
<p>
. Ces lignes dans la méthode extraient des lignes vides de la chaîne d’entrée Wiki :
var pattern:RegExp = /^$/gm;
var result:String = input.replace(pattern, "");
Les symboles
^
et
$
dans l’expression régulière correspondent au début et à la fin d’une ligne. L’indicateur
m
(
multiline
) dans l’expression régulière fait en sorte que cette dernière compare le symbole ^ au début d’une ligne, et non simplement au début de la chaîne.
La méthode
replace()
remplace toutes les chaînes de correspondance (lignes vides) par une chaîne vide (
""
). L’indicateur
g
(
global
) dans l’expression régulière vérifie que la méthode
replace()
remplace toutes les correspondances dans la chaîne (pas simplement la première).