0

将文本导入/转换为 TextFlow 时,是否可以定义生成元素的基于 RegEx 的解析器?

例如:

  • 每当匹配电子邮件地址时,我都想创建一个 LinkElement。
  • 我想在匹配笑脸时创建一个 InlineGraphicElement :)

问候,

马蒂

4

1 回答 1

0

我知道的最简单的方法是获取文本并使用一系列正则表达式来嵌入 HTML。然后从 HTML 创建一个 TextFlow 并将其分配给 RichEditableText(或您正在使用的任何组件)。就像是:

var emailRE:RegExp = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;
var smileyRE:RegExp = /:\)/g;
var sample:String = "Email john@doe.com with smiley :) example.";

var result:String = '';
while (emailRE.test(sample)) {
    result = sample.replace(emailRE, "<a href='event:emailClicked'><font color='0x0000DD'>$&</font></a>");
}
if (result.length > 0) {
    sample = result;
}

var result2:String = '';
while (smileyRE.test(sample)) {
    result2 = sample.replace(smileyRE, "<img src='smiley.png'/>");
}
if (result2.length > 0) {
    sample = result2;
}

richEditableTextComponent.textFlow = TextConverter.importToFlow(sample, TextConverter.TEXT_FIELD_HTML_FORMAT);
richEditableTextComponent.textFlow.addEventListener("emailClicked", emailClickedHandler, false, 0, true);

然后点击处理程序将类似于:

private function emailClickedHandler(event:FlowElementMouseEvent):void {
    var emailAddress:String = LinkElement(event.flowElement).getFirstLeaf().text;
    // do something with emailAddress
}

您还可以通过解析电子邮件/笑脸的字符串并构建 SpanElement、LinkElement 和 InlineGraphicElement 来手动构建基于字符串的 TextFlow,但这对程序员来说要麻烦得多,但是我已经看到了对它的需求(尤其是 RichEditableText并且必须在用户键入键时解析每个 SpanElement 以查看笑脸是否匹配并替换为图形;在此处使用 HTML 无济于事,因为您不想重新分配整个 TextFlow 对象,因为它会导致完全重绘整个流程,而不是只更新必须更新的内容,例如将单个 SpanElement 拆分为一系列 SpanElement - InlineGraphicElement - SpanElement)。

希望这可以帮助!

贾斯汀

于 2011-01-04T06:02:36.867 回答