2009-08-05 147 views
1

我有一个在ActionScript 2中很好的功能,除了它只能替换一个字符。我需要它更像PHP中的str_replace,并替换字符数组。AS2字符串替换字符数组?

这里是我现在的代码,它只是用字符串中的连字符( - )替换空格()。

function str_replace(str){ 
    return str.split(" ").join("-"); 
} 

我所试图做的是从ActionScript字符串URL中使用代替空格,逗号和字符的组合(例如,空格和逗号)。

所以这个:

Shop, Dine, Play 

将成为此:

Shop-Dine-Play 

任何建议都非常感谢! :)

回答

1

对于您的情况,最简单的方法是按照从最长到最短的顺序执行一系列split/join命令。

例如,

txt = txt.split(", ").join(-)

txt = txt.split(",").join(-)

txt = txt.split(" ").join(-)

所以,你没有得到店 - 用餐 - 玩,你替换”, “第一,然后” “ 要么 ” ”。

+0

这很好用!我只是稍微修改它以使用我的函数: str = str.split(“,”).join(' - '); – 2009-08-10 22:15:24

0

这是否适合你?

function replace(txt:String, fnd:String, rep:String):String 
{ 
    return txt.split(fnd).join(rep); 
} 

trace(replace("Shop, Dine, Play", ", ", "-"));//Shop-Dine-Play 

即你搜索可以包含多个字符,在这种情况下,字符串“”

0

如果你想用文字的另一个数组来代替字符数组,你可以这样做

function replace(str:String, toFind:Array, toReplace:Array):String 
{ 
    if(toFind.length != toReplace.length) 
     throw new Error("Error : Find and replace array must match in length"); 


    for(var i:Number = 0; i < toFind.length; i++) 
    { 
     str = str.split(toFind[i]).join(toReplace[i]); 
    } 

    return str; 
} 

而且使用这样的:

replace("abc", ["a", "b", "c"], ["c", "b", "a"]); //result cba 

注意,这是REA如果要替换长字符串中的大量字符,则不是最佳选择。

0

@Ryan - 我的评论失去了所有的格式,所以这里再次。我刚刚意识到这是我最初提供的str_replace函数。但它的作品!

as2或as3?无论使用哪种方式,只需将您的动态文本作为参数调用str_replace()函数,就可以在AS2中的onPress()函数内部或在AS3中单击侦听器。我没有真正测试AS3中的str_replace部分,但它应该工作 - 下面的例子。

private var newString:String; 

// elsewhere in your document 
private function str_replace(str:String):String { 
    return str.split(" ").join("-"); 
} 
private function textClickListener(e:MouseEvent) { 
    if(e.target is TextField){ 
     newString = str_replace(e.target.text); 
     trace(newString); // outputs theTextField.text; 
    } 
} 
theTextField.addEventListener(MouseEvent.CLICK, textClickListener); 
// this assumes you have a dynamic text field named 'theTextField'