WikiParser クラスには、Wiki 入力テキストを同等の HTML 出力に変換するメソッドが含まれます。 この Wiki 変換アプリケーションは堅牢ではありませんが、パターンマッチングおよびストリング変換を行う正規表現の使用方法を示します。
コンストラクター関数は
setWikiData()
メソッドと共に、Wiki 入力テキストのサンプルストリングを次のように単純に初期化します。
public function WikiParser()
{
wikiData = setWikiData();
}
ユーザーがサンプルアプリケーションの「Test」ボタンをクリックすると、アプリケーションは WikiParser オブジェクトの
parseWikiString()
メソッドを呼び出します。このメソッドは、他の複数のメソッドを呼び出し、結果の HTML ストリングを組み立てます。
public function parseWikiString(wikiString:String):String
{
var result:String = parseBold(wikiString);
result = parseItalic(result);
result = linesToParagraphs(result);
result = parseBullets(result);
return result;
}
呼び出されるメソッド(
parseBold()
、
parseItalic()
、
linesToParagraphs()
、および
parseBullets()
)は、入力 Wiki テキストを HTML 形式のテキストに変換するために、ストリングの
replace()
メソッドを使用して、正規表現で定義された一致パターンを置き換えます。
ボールドおよびイタリックのパターンの変換
parseBold()
メソッドは、Wiki のボールドテキストパターン(
'''foo'''
など)を探し、次のように、同等の HTML(
<b>foo</b>
など)に変換します。
private function parseBold(input:String):String
{
var pattern:RegExp = /'''(.*?)'''/g;
return input.replace(pattern, "<b>$1</b>");
}
正規表現の
(.?*)
の部分は、2 つの定義パターン
'''
の間にある任意の数の文字(
*
)に一致することに注意してください。
?
繰り返し制御文字を使用すると、最短一致でマッチングが行われます。そのため、
'''aaa''' bbb '''ccc'''
のようなストリングの場合、最初に一致するストリングは
'''aaa'''
になります。
'''
パターンで開始し、終了するストリング全体ではありません。
正規表現内の括弧は、キャプチャグループを定義します。
replace()
メソッドは、置換ストリングの
$1
コードを使用して、このグループを参照します。正規表現の
g
(
global
)フラグによって、
replace()
メソッドは(最初の 1 つだけではなく)ストリング内のすべての一致を置き換えます。
parseItalic()
メソッドは
parseBold()
メソッドと同じように動作しますが、イタリックテキストの区切り記号として 2 つのアポストロフィ(
''
)を探します(3 つではありません)。
private function parseItalic(input:String):String
{
var pattern:RegExp = /''(.*?)''/g;
return input.replace(pattern, "<i>$1</i>");
}
箇条書きパターンの変換
次の例で示すように、
parseBullet()
メソッドは Wiki の箇条書き行パターン(
* foo
など)を探し、同等の HTML(
<li >foo</li>
など)に変換します。
private function parseBullets(input:String):String
{
var pattern:RegExp = /^\*(.*)/gm;
return input.replace(pattern, "<li>$1</li>");
}
正規表現の先頭の
^
記号は、行の先頭に一致します。正規表現で
m
(
multiline
)フラグを使用した場合、
^
記号は、単純にストリングの先頭ではなく、行頭とマッチングされます。
¥*
パターンは、アスタリスク文字に一致します(
*
繰り返し制御文字ではなく、リテラルのアスタリスクであることを示すために、円記号を使用します)。
正規表現内の括弧は、キャプチャグループを定義します。
replace()
メソッドは、置換ストリングの
$1
コードを使用して、このグループを参照します。正規表現の
g
(
global
)フラグによって、
replace()
メソッドは(最初の 1 つだけではなく)ストリング内のすべての一致を置き換えます。
Wiki 段落パターンの変換
linesToParagraphs()
メソッドは、入力 Wiki ストリングの各行を HTML の
<p>
段落タグに変換します。メソッド内の次の行によって、入力 Wiki ストリングから空の行を削除します。
var pattern:RegExp = /^$/gm;
var result:String = input.replace(pattern, "");
正規表現の
^
記号は行の先頭に一致し、
$
記号は行の末尾に一致します。正規表現で
m
(
multiline
)フラグを使用した場合、^ 記号は、単純にストリングの先頭ではなく、行頭とマッチングされます。
replace()
メソッドは、すべての一致するサブストリング(空の行)を空のストリング(
""
)で置き換えます。正規表現の
g
(
global
)フラグによって、
replace()
メソッドは(最初の 1 つだけではなく)ストリング内のすべての一致を置き換えます。