2010-09-28 78 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