使用ActionScript 3.0在Flash中突出显示单词

时间:2011-04-09 21:00:08

标签: flash actionscript-3 actionscript flash-cs4

我正在使用Flash专业版CS4和actionscript 3.0

制作文本编辑器

它已接近完成,我只需添加一个功能,可以在写入时突出显示某些“标签”,如“[NAME]”和“[AGE]”(通过更改其颜色)。

我正在使用textField,而不是TextArea组件。这是我正在使用的代码,但它不能按计划运行。

taMain.addEventListener(Event.CHANGE, checkTags);
function checkTags(e):void{
    var tempFormat:TextFormat = taMain.getTextFormat(taMain.selectionBeginIndex - 1, taMain.selectionEndIndex);
    var splitText:Array = taMain.text.split(" ");
    for (var i = 0; i < splitText.lenght; i++) {
        switch (splitText[i]) {
            case "[NAME]":
                tempFormat.color = (0xff0000);
            break;
            case "[AGE]":
                tempFormat.color = (0x0000ff);
            break;
            default:
                tempFormat.color = (0x000000);
        }
        taMain.setTextFormat(tempFormat, taMain.text.indexOf(splitText[i]), taMain.text.indexOf(splitText[i]) + splitText[i].length );
    }
}

此代码仅在第一次使用标记时起作用,但如果再次使用标记,则不会更改颜色。

有什么想法吗?我可以使用的任何其他功能吗?

提前致谢。

2 个答案:

答案 0 :(得分:0)

taMain.text.indexOf(splitText[i])将始终找到该单词的第一个匹配项,如第一个“[NAME]”,并在第一次出现时设置文本格式,即使for循环出现在另一个出现的“[ NAME]”。

indexOf()接受第二个可选参数,索引从中开始,因此您可以通过执行以下操作来跟踪当前文本中的位置:

var tempFormat:TextFormat = taMain.getTextFormat(taMain.selectionBeginIndex - 1, taMain.selectionEndIndex);
var splitText:Array = taMain.text.split(" ");
var startIndex:Number = 0;
for (var i = 0; i < splitText.length; i++) {
    switch (splitText[i]) {
        case "[NAME]":
            tempFormat.color = (0xff0000);
        break;
        case "[AGE]":
            tempFormat.color = (0x0000ff);
        break;
        default:
            tempFormat.color = (0x000000);
    }
    taMain.setTextFormat(tempFormat, taMain.text.indexOf(splitText[i], startIndex), taMain.text.indexOf(splitText[i], startIndex) + splitText[i].length );
    startIndex = taMain.text.indexOf(splitText[i], startIndex) + splitText[i].length;
}

但我不认为在var splitText:Array = taMain.text.split(" ")中分割空间是一种在一般文本中查找单词的好方法。如果[AGE]是一行的最后一个单词,后面有一个换行符,或者[NAME]后面有一个逗号,如“你好[NAME],你好吗”怎么办?上面的代码会遗漏这些事件。

答案 1 :(得分:0)

使用正则表达式,如果您的输入在ASCII范围内(例如没有德语变音符号),则很容易找到单词/短语。然后,您可以将搜索词封装在\ b中,如下所示:

/\bMyVar\b/g 

这将匹配MyVar的每一次出现,但仅限于整个单词。例如,MyVarToo不匹配,因为\b指的是单词边界。