复制Codeigniter';Javascript中的s humanize()和下划线()函数

复制Codeigniter';Javascript中的s humanize()和下划线()函数,javascript,regex,string,Javascript,Regex,String,我试图在Javascript中复制CI的人性化()和下划线()函数 从中,下划线()获取多个由空格分隔的单词并在它们之间加下划线,人性化()获取多个由下划线分隔的单词并在它们之间加空格。CI实现类似于: function underscore($str) { return preg_replace('/[\s]+/', '_', strtolower(trim($str))); } function humanize($str) { return ucwords(preg_re

我试图在Javascript中复制CI的
人性化()
下划线()
函数

从中,
下划线()
获取多个由空格分隔的单词并在它们之间加下划线,
人性化()
获取多个由下划线分隔的单词并在它们之间加空格。CI实现类似于:

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

function humanize($str) {
    return ucwords(preg_replace('/[_]+/', ' ', strtolower(trim($str))));
}
我的代码不必精确地复制行为,但是对于
下划线()
函数,我希望它能够处理多个空格字符,而
人性化()
函数可以稍微宽松一些,并假设只有一个下划线用于分隔每个单词

到目前为止,我得到的是:

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(' ');
}
函数下划线(字符串){
string=$.trim(string).toLowerCase();
var-oldString;
while(oldString!==字符串){
oldString=字符串;
string=string.replace(/\s+/,“"”);
}   
返回字符串;
}
功能人性化(字符串){
字符串=$.trim(字符串);
var术语=字符串。拆分(“”“);
对于(var i=0;i

这很好,是的,但我并不喜欢我这样做(与PHP相比,它太长了。必须有一个更紧凑的版本),所以我想知道是否有一个更有效/可读的方法来实现这一点

您可以使用
g
修饰符进行全局替换,如下所示:

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

您可以使用
g
修饰符进行全局替换,如下所示:

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

我不敢相信我怎么会错过那个(现在我对复制那个标志需要多少代码感到有点尴尬)我不敢相信我怎么会错过那个(现在我对复制那个标志需要多少代码感到有点尴尬)