2011-12-13 63 views
4

我有這個AS3功能AS3的replaceAll不敏感

public static function StringReplaceAll(source:String, find:String, replacement:String) : String { 
     return source.split(find).join(replacement); 
} 

正常工作:任何想法如何使它情況下insenstive? Regards

回答

19

只需使用String#replace()函數。

例如:

trace("HELLO there".replace(/e/gi, "a")); 
//traces HaLLO thara 

在替換功能的第一個參數是一個正則表達式。你會發現他們的信息all over the web。 Grant Skinner提供的這個方便的工具叫做Regexr,您可以使用它來測試正則表達式的ActionScript風格。

兩個正斜槓(/)之間的部分是實際的正則表達式。

  • 在「」之後的正則表達式的意思是「全局替換」(即,字母「e」的在本例中,所有出現的無「G」,將只需更換中第一次出現)。
  • 'i'表示「做一個不區分大小寫的搜索」(在這個例子中,如果沒有'i',大寫E就不會被替換)。

注意/e/gi實際上只是爲new RegExp("e", "gi")

+0

+1還要注意,拆分功能也可以採取RegEx爲第一個參數,但替換功能顯然是要走的路 – OXMO456

+0

我只有upvoted因爲你解釋了你的RegEx。 –

-1

速記一個快速的方法可能是做兩個替代品。一個用於lowerCase,另一個用於upperCase。它會是這個樣子:

public static function StringReplaceAll(source:String, find:String, replacement:String) : String 
{ 

    var replacedLowerCase:String = StringReplace(source, find.toLowerCase(), replacement.toLowerCase()); 

    return StringReplace(replacedLowerCase, find.toUpperCase(), replacement.toUpperCase()); 
} 

private static function StringReplace(source:String, find:String, replacement:String) : String 
{ 
    return source.split(find).join(replacement); 
} 

因此,在這種情況下,你會保持你的find完好即的情況下:

trace(StringReplaceAll('HELLO there', 'e', 'a')); 
// traces HALLO thara 

如果您不希望保留的情況下完整@ RIAstar的String.replace()答案更清潔。 (但你當然也可以使用他的例子兩次爲此事)

+0

不適用於「HEeLLO theere」 – yarek

+0

它不起作用? 'trace(StringReplaceAll(「HEeLLO theere」,「e」,「a」));'放出'HAaLLO thaara'就好了 –

+0

Works fine !!!,Thank you – esdebon