我正在尝试在没有循环的情况下在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);
}
答案 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] } );
}