2010-06-03 92 views
0

如果我有以下代码:使用在StringUtil.substitue变量名的Actionscript

var value : String = StringUtil.substitute("The value {0} requested is {1}", user, value); 

如何使用变量名称,而不是使用{0}和{1}中的代码。

请指教。谢谢。

编辑:

以上代码从http://www.rialvalue.com/blog/2010/05/10/string-templating-in-flex/引述。
它说:“还要注意,我们使用顺序替换参数,它会相当容易地进行命名参数替换(即使用像$ {var1}这样的标记)”。因此,我认为这样做可能很容易,但我不知道该怎么做。

回答

2

看起来不可能。而且有种意义,它只允许以零为基础的整数,因为你传递了可变数目的参数,你不能识别(除了在参数列表中的相对位置)。

下面是一段代码,将通过名称替换标记:

public static function replacePlaceholders(input:String,replacementMap:Object):String { 
     // '${', followed by any char except '}', ended by '}' 
     return input.replace(/\${([^}]*)}/g,function():String { 
      return replaceEntities(arguments,replacementMap); 
     }); 

    } 

    private static function replaceEntities(regExpArgs:Array,map:Object):String { 
     var entity:String  = String(regExpArgs[0]); 
     var entityBody:String = String(regExpArgs[1]); 
     return (map[entityBody]) ? map[entityBody] : entity; 
    } 

用途:

var test:String = "Hello there ${name}, how is the ${noun} today?"; 
var replacementMap:Object = { 
    name : "YOUR_NAME_HERE", 
    noun : "YOUR_NOUN_HERE" 
}; 

trace(StringUtils.replacePlaceholders(test,replacementMap)); 

我使用的占位符的格式为$ {placeholdername},因为它的安全, 我认为。但是如果你想删除美元符号,请相应地更改正则表达式。

+0

这是否是StringUtil类的扩展?由StringUtils显示? – phwd 2010-06-03 16:59:29

+0

不是,它是我写的实用工具类的一部分。 – 2010-06-03 18:18:03