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()
메서드는 각각 문자열의
replace()
메서드를 사용하여 일반 표현식으로 정의된 일치 패턴을 바꿉니다. 이를 통해 Wiki 입력 텍스트를 HTML 형식 텍스트로 변환할 수 있습니다.
굵은체 및 기울임체 패턴 변환
parseBold()
메서드는 다음과 같이 Wiki 굵은체 텍스트 패턴(예:
'''foo'''
)을 검색한 후 동일한 HTML 형식(예:
<b>foo</b>
)으로 변환합니다.
private function parseBold(input:String):String
{
var pattern:RegExp = /'''(.*?)'''/g;
return input.replace(pattern, "<b>$1</b>");
}
이때 일반 표현식의
(.?*)
부분은 정의된 두
'''
패턴 사이에 있는 모든 문자(
*
)를 찾습니다. 이때
?
한정 기호는 최장 일치가 수행되지 않도록 하는 역할을 합니다. 즉,
'''aaa''' bbb '''ccc'''
와 같은 문자열에 대해 첫 번째로 일치하는 문자열은
'''
패턴으로 시작하고 끝나는 전체 문자열이 아니라
'''aaa'''
가 됩니다.
일반 표현식의 괄호는 캡처 그룹을 정의하고
replace()
메서드는 대체 문자열에서
$1
코드를 사용하여 이 그룹을 참조합니다. 일반 표현식에
g
(
global
) 플래그를 설정하고
replace()
메서드를 호출하면 문자열에서 일치하는 첫 번째 항목 및 모든 항목이 대체됩니다.
parseItalic()
메서드는
parseBold()
메서드와 비슷하지만 기울임체 텍스트에 대한 구분 기호로 세 개가 아니라 두 개의 아포스트로피(
''
)를 확인한다는 차이가 있습니다.
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()
메서드를 호출하면 문자열에서 일치하는 첫 번째 항목 및 모든 항목이 대체됩니다.
Wiki 단락 패턴 변환
linesToParagraphs()
메서드는 Wiki 입력 문자열의 각 행을 HTML
<p>
단락 태그로 변환합니다. 메서드의 이러한 행은 Wiki 입력 문자열에서 빈 행을 제거합니다.
var pattern:RegExp = /^$/gm;
var result:String = input.replace(pattern, "");
일반 표현식에
^
및
$
심볼이 있으면 행의 시작 및 끝 위치를 찾으며,
m
(
multiline
) 플래그가 설정되어 있으면 ^ 심볼이 문자열의 시작 위치 및 행의 시작 위치에 대응됩니다.
replace()
메서드는 일치하는 모든 하위 문자열(빈 행)을 빈 문자열(
""
)로 바꿉니다. 일반 표현식에
g
(
global
) 플래그를 설정하고
replace()
메서드를 호출하면 문자열에서 일치하는 첫 번째 항목 및 모든 항목이 대체됩니다.