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