2009-08-05 148 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'