Klassen WikiParser innehåller metoder för att konvertera Wiki-indata till motsvarande HTML-utdata. Detta är inget stabilt Wiki-konverteringsprogram, men det innehåller några bra exempel på hur reguljära uttryck kan användas för mönstermatchning och strängkonvertering.
Konstruktorfunktionen tillsammans med metoden
setWikiData()
initierar en enkel sträng med Wiki-indata enligt följande:
public function WikiParser()
{
wikiData = setWikiData();
}
När användaren klickar på knappen Test i exempelprogrammet anropas metoden
parseWikiString()
för WikiParser-objektet. Den här metoden anropar ett antal andra metoder vilka i sin tur sätter samma den resulterade HTML-strängen.
public function parseWikiString(wikiString:String):String
{
var result:String = parseBold(wikiString);
result = parseItalic(result);
result = linesToParagraphs(result);
result = parseBullets(result);
return result;
}
I de anropade metoderna –
parseBold()
,
parseItalic()
,
linesToParagraphs()
och
parseBullets()
– används metoden
replace()
för strängen för att ersätta matchande mönster, definierade i ett reguljärt uttryck, så att Wiki-texten kan omformas till HTML-formaterad text.
Konvertera mönster för fet och kursiv stil
Med metoden
parseBold()
kan du söka efter ett Wiki-textmönster med fet stil (t.ex.
'''foo'''
) och omforma det till dess HTML-motsvarighet (t.ex.
<b>foo</b>
), enligt följande:
private function parseBold(input:String):String
{
var pattern:RegExp = /'''(.*?)'''/g;
return input.replace(pattern, "<b>$1</b>");
}
Observera att delen med
(.?*)
i det reguljära uttrycket matchar alla tecken (
*
) mellan de båda definierade
'''
-mönstren. Med händelsen
?Med kvantifieraren
görs en matchning som inte är ”girig” så att för en sträng som
'''aaa''' bbb '''ccc'''
, kommer den första matchande delsträngen att vara
'''aaa'''
och inte den kompletta strängen (vilken startar och slutar med mönstret
'''
).
Parenteser i reguljära uttryck används för att definiera en hämtad grupp och metoden
replace()
refererar till gruppen med hjälp av koden
$1
i ersättningssträngen.
g
-flaggan (
global
) i det reguljära uttrycket gör att metoden
replace()
ersätter alla matchningar i strängen (inte bara den första).
Metoden
parseItalic()
fungerar som metoden
parseBold()
med undantag för att den kontrollerar två apostrofer (
''
) som avgränsare för kursiv text (inte här):
private function parseItalic(input:String):String
{
var pattern:RegExp = /''(.*?)''/g;
return input.replace(pattern, "<i>$1</i>");
}
Konvertera mönster för punktlistor
I exemplet nedan används metoden
parseBullet()
för att leta efter punktlistemönstret för Wiki (t.ex.
* foo
) och omformar det till dess HTML-motsvarighet (t.ex.
<li>foo</li>
):
private function parseBullets(input:String):String
{
var pattern:RegExp = /^\*(.*)/gm;
return input.replace(pattern, "<li>$1</li>");
}
Symbolen
^
i början av det reguljära uttrycket matchar radens början.
m
-flaggan (
multiline
) i det reguljära uttrycket leder till att det reguljära uttrycket matchar symbolen
^
mot början av raden, inte bara början av strängen.
Mönstret
\*
matchar en asterisk (det omvända snedstrecket används för att ange att det är en litteral asterisk och inte en
*
-kvantifierare).
Parenteser i reguljära uttryck används för att definiera en hämtad grupp och metoden
replace()
refererar till gruppen med hjälp av koden
$1
i ersättningssträngen.
g
-flaggan (
global
) i det reguljära uttrycket gör att metoden
replace()
ersätter alla matchningar i strängen (inte bara den första).
Konvertera Wiki-styckemönster
Med metoden
linesToParagraphs()
kan du konvertera varje rad i en Wiki-sträng till HTML-stycketaggen
<p>
. Dessa rader i metoden tar bort tomma rader från Wiki-strängen:
var pattern:RegExp = /^$/gm;
var result:String = input.replace(pattern, "");
Symbolerna
^
och
$
i det reguljära uttrycket matchar början och slutet av en rad.
m
-flaggan (
multiline
) i det reguljära uttrycket leder till att det reguljära uttrycket matchar symbolen ^ mot början av raden, inte bara början av strängen.
Metoden
replace()
används för att ersätta alla matchande delsträngar (tomma rader) med en tom sträng (
""
).
g
-flaggan (
global
) i det reguljära uttrycket gör att metoden
replace()
ersätter alla matchningar i strängen (inte bara den första).