Репликация функции Codeizeiter humanize () и underscore () в Javascript - PullRequest
0 голосов
/ 28 сентября 2010

Я пытаюсь воспроизвести функцию CI humanize() и underscore() в Javascript.

Из документации CI , 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. Должна быть более компактная версия), поэтому мне интересно, есть ли более эффективный / читаемый метод для достижения этой цели.

1 Ответ

4 голосов
/ 28 сентября 2010

Вы можете использовать модификатор g для глобальной замены:

function underscore(string) {
   string = $.trim(string).toLowerCase();
   return string.replace(/\s+/g, '_');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...