2011-12-13 62 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