flex_(5)正则表达式_WikiEditor解析程序;

来源:互联网 发布:仓库管理系统源码.net 编辑:程序博客网 时间:2024/06/10 05:43

=>WikiEditor.mxml

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
   xmlns:s="library://ns.adobe.com/flex/spark" 
   xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"
   creationComplete="creationCompleteHandler(event)">
<fx:Script>
<![CDATA[
import com.cen.programmingas3.wikiEditor.CurrencyConverter;
import com.cen.programmingas3.wikiEditor.URLParser;
import com.cen.programmingas3.wikiEditor.WikiParser;

import mx.events.FlexEvent;

/*转换类*/
private var wikiParser:WikiParser;

protected function creationCompleteHandler(event:FlexEvent):void
{
/*初始化_wikiParser示例已经包含原始数据*/
wikiParser = new WikiParser();

inputText.text = wikiParser.wikiData;

outputText.text = wikiParser.parseWikiString(inputText.text);
}

protected function testButton_clickHandler(event:MouseEvent):void
{
var outStr:String;
outStr = wikiParser.parseWikiString(inputText.text);

if(dollarToEuro.selected) {
outStr = CurrencyConverter.usdToEuro(outStr);
}

if(urlToATag.selected) {
outStr = URLParser.urlToATag(outStr);
}

outputText.text = outStr;
}

]]>
</fx:Script>
<!--wiki解析程序-->
<s:VGroup width="650" height="450" verticalAlign="middle" verticalCenter="0" horizontalAlign="center"
  horizontalCenter="0">
<s:Panel width="100%" height="100%" title="解析程序_原始字符串">
<s:VGroup width="100%" height="100%">
<s:TextArea id="inputText" width="100%" height="100%"/>
<s:HGroup width="100%" horizontalAlign="right">
<s:CheckBox id="dollarToEuro" label="$ to €"/>
<s:CheckBox id="urlToATag" label="URLs to &lt;a&gt;"/>
<s:Button id="testButton" label="转换" click="testButton_clickHandler(event)"/>
</s:HGroup>
</s:VGroup>
</s:Panel>

<s:Panel width="100%" height="100%" title="HTML文本">
<s:TextArea id="outputText" width="100%" height="100%"/>
</s:Panel>
</s:VGroup>
</s:Application>


=>WikiParser .as

package com.cen.programmingas3.wikiEditor
{
/**
 * wiki解析类
 * - 使用正则表达式将wiki字符串转换成HTML文本;
 */ 
public class WikiParser {

/**
 * 属性*/
/**
 * wiki字符串
 */
public var wikiData:String; 

/**
 * 构造函数:使用原始数据初始化wikiData属性;
 */
public function WikiParser() {
wikiData = setWikiData();
}

/**
 * 返回原始wiki数据
 */
private function setWikiData():String {
/*原始数据*/
var str:String = "'''Test wiki data'''\n" +// 加粗字体;
"\n" +
"This is a test. This is ''only'' a test.\n" +// 斜体;
"Basic rules:\n" +
"* 3 single quote marks indicates '''bold'''.\n" +
"* 2 single quote marks indicates ''italics''.\n" +
"* An asterisk creates a bulleted list item.\n" +
"* Use blank lines as paragraph separators.\n" +
"\n" +
"You can convert a dollar value like this: $9.95.\n" +
"\n" +
"Here's a URL to convert: http://www.adobe.com.\n" +
"\n" +
"Here's an e-mail address to convert: mailto:bob@example.com.";

return str;
}

/**
 * 转换方法:
 * 转换wiki字符串为HTML文本;
 */
public function parseWikiString (wikiString:String):String {
// 粗体处理
var result:String = parseBold(wikiString);

// 斜体处理
result = parseItalic(result);

// 段落处理
result = linesToParagraphs(result);

// 项目符号处理
result = parseBullets(result);

return result;
}

/**
 * 粗体处理:将'''foo'''转换成<b>foo</b>
 */
private function parseBold(input:String):String {
var pattern:RegExp = /'''(.*?)'''/g;// 有限匹配;
return input.replace(pattern, "<b>$1</b>");
}

/**
 * 斜体处理:将''foo''转换成<i>foo</i>;
 */
private function parseItalic(input:String):String {
var pattern:RegExp = /''(.*?)''/g;
return input.replace(pattern, "<i>$1</i>");
}

/**
 * 项目符号;将* foo转换成<li>foo</li>;
 */
private function parseBullets(input:String):String {
var pattern:RegExp = /^\*(.*)/gm;
return input.replace(pattern, "<li>$1</li>");
}

/**
 * 段落处理:使用<p>HTML标签替换空行;
 */
private function linesToParagraphs(input:String):String {

/**
 * Strips out(剔除) empty lines(空行), which match /^$/gm
 */
var pattern:RegExp = /^$/gm;
var result:String = input.replace(pattern, "");

/**
 * 除了项目列表项外,其他都加上<P>标签;
 */
pattern = /^([^*].*)$/gm;
return result.replace(pattern, "<p>$1</p>");
}   
}
}


=>URLParser.as

package com.cen.programmingas3.wikiEditor
{

/**
 * 实用类:转换URL字符串
 * _ such as "http://www.adobe.com" to HTML anchor links, such as "<a href='http://www.adobe.com'>http://www.adobe.com</a>;
 * 
 * 特别说明:在此说明的例子中,url以及ftp正则表达式不是正规、严谨的,这里只是便于说明;
 */
public class URLParser
{
/**
 * Converts HTTP and FTP URLs to anchor links. This function assembles(组装) a 
 * RegExp pattern out of multiple parts: protocol(协议), urlPart, and optionalUrlPart.
 */
public static function urlToATag(input:String):String {

/**
 * 协议部分_http://
 * Matches either http:// or ftp://. (?: indicates that the interior group
 * is not a capturing group.(不捕获组)
 */
var protocol:String = "((?:http|ftp)://)";

/** 
 * www.adobe
 */
var urlPart:String = "([a-z0-9_-]+\.[a-z0-9_-]+)";// matches foo.example;

/**
 * .com
 */
var optionalUrlPart:String = "(\.[a-z0-9_-]*)";

/**
 * 组装正则表达式
 * Assembles the pattern from its component parts.
 */
var urlPattern:RegExp = new RegExp (protocol + urlPart + optionalUrlPart, "ig");

/**
 * Replaces matching URL strings with a replacement string. The call to 
 * the replace() method uses references to captured groups (such as $1) 
 * to assemble the replacement string.
 */
var result:String = input.replace(urlPattern, "<a href='$1$2$3'><u>$1$2$3</u></a>");// <u>添加下划线;

/** 
 * Next, find e-mail patterns and replace them with <a> hyperlinks.
 * 转换邮件地址
 */
result = emailToATag(result); 
return result;
}

/**
 * 如:mailto:bob@example.com;
 * Replaces an e-mail pattern with a corresponding(相对应的) HTML anchor hyperlink.
 * Like the urlToATag() method, this method assembles a regular expression out of constituent(组成) parts.
 */
public static function emailToATag(input:String):String {
/**
 * mailto:
 */
var protocol:String = "(mailto:)"; // $1;

/**
 * 姓名
 * Matches the name and @ symbol, such as bob.fooman@.
 */
var name:String = "([a-z0-9_-]+(?:\.[a-z0-9_-])*@)";// $2;

/**
 * For the e-mail pattern bob.fooman@mail.example.com, matches 
 * mail.example. (including the trailing dot).
 */
var domain:String = "((?:[a-z0-9_-].)*)";// $3;

/**
 * Matches the superdomain, such as com, uk, or org., which is 2 - 4 letters.
 */
var superDomain:String = "([a-z]{2,4})";// $4;

/**
 * Assembles(组装) the matching regular expression out of constituent parts.
 */
var emailPattern:RegExp = new RegExp (protocol + name + domain + superDomain, "ig");

/**
 * Replaces matching e-mail strings with a replacement string. The call to 
 * the replace() method uses references to captured groups (such as $1) 
 * to assemble the replacement string.
 */
var result:String = input.replace(emailPattern, "<a href='$1$2$3$4'><u>$1$2$3$4</u></a>"); 

return result;
}
}
}


=>CurrencyConverter .as

package com.cen.programmingas3.wikiEditor
{

/**
 * 美元转换成欧元类
 */
public class CurrencyConverter {
/**
 * 美元转换成欧元
 * Converts strings of US dollar values (such as "$9.95") 
 * to Euro strings (such as "8.24 €".
 */
public static function usdToEuro(input:String):String {

/**
 * 美元正则表达式模式
 */
var usdPrice:RegExp = /\$([\d][\d,]*\.\d+)/g;

/**
 * Replaces the matching dollar strings with the Euro equivalent string.
 * The second parameter defines a function, used to define the 
 * replacement string.
 */
return input.replace(usdPrice, usdStrToEuroStr); 
}

/**
 * 如果replace()方法第二个参数:为函数,则会向其传递如下参数:
 * - (1)、匹配部分:The matching portion(部分) of the string, such as "$9.95";
 * - (2)、括号匹配项:The parenthetical(括号) match, such as "9.95";
 * - (3)、匹配开始下标:The index position in the string where the match begins;
 * - (4)、原始字符串:The complete string;
 * 
 * This method takes the second parameter (args[1]), converts it to
 * a number, and then converts it to a Euro string, by applying a
 * conversion factor and then appending the € character.
 */
private static function usdStrToEuroStr(...args):String {
// 美元数值:
var usd:String = args[1];

// 去除逗号:
usd = usd.replace(",", "");

// 美元转换成欧元汇率:
var exchangeRate:Number = 0.828017;

// 欧元值:
var euro:Number = Number(usd) * exchangeRate;

// 欧元符号:
const euroSymbol:String = String.fromCharCode(8364);

return euro.toFixed(2) + " " + euroSymbol;
}
}
}

原创粉丝点击