2010-04-18 49 views
1

我试图在没有循环的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); 
} 

回答

3

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

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

此工程在JavaScript中至少。

+0

嗨浓汤,感谢您的答复。这完美地工作,它只是为匿名函数提供一个标志(不是什么大问题)。如果你不介意我问。 $ 0是多少? $似乎不在AS3文档中。那么这是如何工作的? – Deyon 2010-04-18 21:33:21

+0

@Deyon:'$ 0'只是一个常规变量标识符。你也可以使用'match'或任何你想要的。但由于'replace'使用'$ 1','$ 2'等来引用组匹配,'$ 0'是整个比赛的好名字。 – Gumbo 2010-04-18 21:53:04

4

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

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

谢谢。它帮助了很多。 :) – Ravish 2012-03-22 03:15:48

0

只是觉得应该把他们的两分钱的字符串可以全部大写

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

这个答案不抛出任何编译器错误的下严格和我把它想更加健壮一些,处理像连字符这样的边缘情况(忽略它们),下划线(将它们当作空格)以及其他特殊的非单词字符(如斜杠或圆点)。

在正则表达式末尾注意/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] }); 
}