Как я могу преобразовать camelCase в строку с пробелами?(например, CamelCase для «Camel Case») - PullRequest
2 голосов
/ 23 февраля 2012

Используя ColdFusion, я хотел бы преобразовать строки camelCase в удобочитаемую строку, например:

firstName -> Имя

Кроме того, в идеале это должно быть сделано все в строкечто-то вроде Ucase(rereplace('myCamelCaseString',[regex]," ")).Если встраивание невозможно, то возможно UDF?

Ответы [ 4 ]

11 голосов
/ 23 февраля 2012

#rereplace("camelCaseString","([A-Z])"," \1","all")#

edit: версия ниже будет обрабатывать первый символ в нижнем регистре.

#rereplace(rereplace("camelCaseString","(^[a-z])","\u\1"),"([A-Z])"," \1","all")#

4 голосов
/ 23 февраля 2012

CFLib ваш друг!

Есть camelToSpace () , который делает то, что вы просите, за исключением использования заглавных букв.

<cfscript>
/**
 * Breaks a camelCased string into separate words
 * 8-mar-2010 added option to capitalize parsed words Brian Meloche brianmeloche@gmail.com
 * 
 * @param str      String to use (Required)
 * @param capitalize      Boolean to return capitalized words (Optional)
 * @return Returns a string 
 * @author Richard (brianmeloche@gmail.comacdhirr@trilobiet.nl) 
 * @version 0, March 8, 2010 
 */
function camelToSpace(str) {
    var rtnStr=lcase(reReplace(arguments.str,"([A-Z])([a-z])","&nbsp;\1\2","ALL"));
    if (arrayLen(arguments) GT 1 AND arguments[2] EQ true) {
        rtnStr=reReplace(arguments.str,"([a-z])([A-Z])","\1&nbsp;\2","ALL");
        rtnStr=uCase(left(rtnStr,1)) & right(rtnStr,len(rtnStr)-1);
    }
return trim(rtnStr);
}
</cfscript>

Если вы хотите использовать заглавные слова в результирующей строке, есть CapFirstTitle ()

<cfscript>
/**
 * Returns a string with words capitalized for a title.
 * Modified by Ray Camden to include var statements.
 * Modified by James Moberg to use structs, added more words, and reset-to-all-caps list.
 * 
 * @param initText      String to be modified. (Required)
 * @return Returns a string. 
 * @author Ed Hodder (ed.hodder@bowne.com) 
 * @version 3, October 7, 2011 
 */
function capFirstTitle(initText){
       var j = 1; var m = 1;
       var doCap = true;
       var tempVar = "";
       /* Make each word in text an array variable */
       var Words = ListToArray(LCase(trim(initText)), " ");
       var excludeWords = structNew();
       var ResetToALLCAPS = structNew();
       /* Words to never capitalize */
       tempVar =  ListToArray("a,above,after,ain't,among,an,and,as,at,below,but,by,can't,don't,for,from,from,if,in,into,it's,nor,of,off,on,on,onto,or,over,since,the,to,under,until,up,with,won't");
       for(j=1; j LTE (ArrayLen(tempVar)); j = j+1){
               excludeWords[tempVar[j]] = 0;
       }
       /* Words to always capitalize */
       tempVar = ListToArray("II,III,IV,V,VI,VII,VIII,IX,X,XI,XII,XIII,XIV,XV,XVI,XVII,XVIII,XIX,XX,XXI");
       for(j=1; j LTE (ArrayLen(tempVar)); j = j+1){
               ResetToALLCAPS[tempVar[j]] = 0;
       }
       /* Check words against exclude list */
       for(j=1; j LTE (ArrayLen(Words)); j = j+1){
               doCap = true;
               /* Word must be less than four characters to be in the list of excluded words */
               if(LEN(Words[j]) LT 4){
                       if(structKeyExists(excludeWords,Words[j])){ doCap = false; }
               }
               /* Capitalize hyphenated words */
               if(ListLen(trim(Words[j]),"-") GT 1){
                       for(m=2; m LTE ListLen(Words[j], "-"); m=m+1){
                               tempVar = ListGetAt(Words[j], m, "-");
                               tempVar = UCase(Mid(tempVar,1, 1)) & Mid(tempVar,2, LEN(tempVar)-1);
                               Words[j] = ListSetAt(Words[j], m, tempVar, "-");
                       }
               }
               /* Automatically capitalize first and last words */
               if(j eq 1 or j eq ArrayLen(Words)){ doCap = true; }
               /* Capitalize qualifying words */
               if(doCap){ Words[j] = UCase(Mid(Words[j],1, 1)) & Mid(Words[j],2, LEN(Words[j])-1); }
               if (structKeyExists(ResetToALLCAPS, Words[j])) Words[j] = ucase(Words[j]);
       }
       return ArrayToList(Words, " ");
}
</cfscript>

Итак, когда у вас есть эти UDF, вы можете сделать

CapFirstTitle(camelToSpace('myCamelCaseString'))

который вернет My Camel Case String.

0 голосов
/ 10 ноября 2012

Вот две функции, которые работают вместе, чтобы преобразовать строку слов в случай верблюда. Слова могут быть разделены пробелом или подчеркиванием, хотя вы можете добавлять другие символы по мере необходимости.

<cffunction name="camelCase" access="public" output="false" returntype="string">
    <cfargument name="sourceString" type="string" required="true">
    <cfscript>
        var s = LCase(Trim(arguments.sourceString));
        s = camelCaseByWordSeperator(s, " ");
        s = camelCaseByWordSeperator(s, "_");   
        return s;
    </cfscript>
</cffunction>

<cffunction name="camelCaseByWordSeperator" access="private" output="false" returntype="string">
    <cfargument name="sourceString" type="string" required="true">
    <cfargument name="separator"    type="string" required="false" default="_">
    <cfscript>
        var s = arguments.sourceString;
        var wordBreakPos = Find(arguments.separator, s); 
        while (wordBreakPos gt 0) {
            lens = Len(s);
            if (wordBreakPos lt lens) {
                s = Replace(Left(s, wordBreakPos), arguments.separator, "", "all") & UCase(Mid(s, wordBreakPos+1, 1)) & Right(s, lens - wordBreakPos - 1);
            } else {
                s = Replace(s, arguments.separator, "", "all");
            }
            wordBreakPos = Find(arguments.separator, s);
        }
        return s;
    </cfscript>
</cffunction>
0 голосов
/ 23 февраля 2012

Я не думаю, что вы можете сделать это за один раз с регулярным выражением, потому что они не поддерживают рекурсию / итерацию, поэтому вы не можете заставить его работать со строками с любым количеством словPPedTogether.

Вы можете просто сделать цикл, в котором вы начинаете с пустой строки, зацикливаетесь на строке camelCase и каждый раз, когда вы найдете заглавную букву, отделяете буквы перед ней и добавляете ее в новую строку с пробелом. 1003 *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...