使用正则表达式将actionScript中的每个单词大写

时间:2010-04-18 20:04:37

标签: regex flex actionscript-3 air

我正在尝试在没有循环的情况下在actionScript中执行初始上限但是我被卡住了。我想选择第一个字母或每个单词然后在该字母上应用大写。那么我的选择部分是正确的,但现在处于死胡同,任何想法?我试图在没有循环和切割字符串的情况下这样做。

// replaces with x since I can't figure out how to replace with
// the found result as uppercase
public function initialcaps():void 
{
    var pattern:RegExp=/\b[a-z]/g;
    var myString:String="yes that is my dog dancing on the stage";
    var nuString:String=myString.replace(pattern,"x");
    trace(nuString);
}

4 个答案:

答案 0 :(得分:4)

您也可以使用它来避免编译器警告。

myString.replace(pattern, function():String
            {
                return String(arguments[0]).toUpperCase();
            });

答案 1 :(得分:3)

尝试使用返回大写字母的函数:

myString.replace(pattern, function($0){return $0.toUpperCase();})

这至少在JavaScript中起作用。

答案 2 :(得分:0)

我以为我会把它们扔两美分以换取可能全部大写的字符串

var pattern:RegExp = /\b[a-zA-Z]/g;
myString = myString.toLowerCase().replace(pattern, function($0){return $0.toUpperCase();});

答案 3 :(得分:0)

这个答案不会在 strict 下抛出任何类型的编译器错误,我希望它更加健壮,处理连字符(忽略它们),下划线(将它们视为空格)和其他特殊的非单词字符,如斜线或点。

注意正则表达式末尾的/g开关非常重要。没有它,函数的其余部分是无用的,因为它只会解决第一个单词,而不是后续单词。

for each ( var myText:String in ["this is your life", "Test-it", "this/that/the other thing", "welcome to the t.dot", "MC_special_button_04", "022s33FDs"] ){
    var upperCaseEveryWord:String = myText.replace( /(\w)([-a-zA-Z0-9]*_?)/g, function( match:String, ... args ):String { return args[0].toUpperCase() + args[1]  } );
    trace( upperCaseEveryWord );
}

输出:

This Is Your Life
Test-it
This/That/The Other Thing
Welcome To The T.Dot
MC_Special_Button_04
022s33FDs

对于复制粘贴艺术家来说,这是一个现成的功能:

public function upperCaseEveryWord( input:String ):String {
    return input.replace( /(\w)([-a-zA-Z0-9]*_?)/g, function( match:String, ... args ):String { return args[0].toUpperCase() + args[1]  } );
}