2010-09-28 24 views
-1

我試圖在Javascript中複製CI的humanize()underscore()函數。在Javascript中複製Codeigniter的humanize()和下劃線()函數

CI documentation,underscore()取多個單詞用空格分隔並加下劃線,而humanize()用多個單詞用下劃線隔開並在它們之間增加空格。該CI實現看起來是這樣的:

function underscore($str) { 
    return preg_replace('/[\s]+/', '_', strtolower(trim($str))); 
} 

function humanize($str) { 
    return ucwords(preg_replace('/[_]+/', ' ', strtolower(trim($str)))); 
} 

我的代碼不具備自我複製行爲正好,但對於underscore()功能我想它能夠處理多個空格字符,而humanize()函數可能有點鬆散,並且假定只有一個下劃線將僅用於分隔每個單詞。

到目前爲止,我所擁有的是:

function underscore(string) { 
    string = $.trim(string).toLowerCase(); 
    var oldString; 

    while(oldString !== string){ 
     oldString = string; 
     string = string.replace(/\s+/, '_'); 
    } 
    return string; 
} 

function humanize(string) { 
    string = $.trim(string); 
    var terms = string.split('_'); 

    for(var i=0; i < terms.length; i++){ 
     terms[i] = terms[i].charAt(0).toUpperCase() + terms[i].slice(1); 
    } 

    return terms.join(' '); 
} 

的正常工作,是的,但我真的不喜歡我這樣做的方式(這是方式相比,PHP過長有必須。是一個更緊湊的版本),所以我想知道是否有更高效/可讀的方法來實現這一點。

回答

4

可以使用g修改做全球替換爲:

function underscore(string) { 
    string = $.trim(string).toLowerCase(); 
    return string.replace(/\s+/g, '_'); 
} 
+0

我無法相信我怎麼錯過了(現在我覺得它花了多少代碼複製該標誌略顯尷尬) – 2010-09-28 12:19:48