2017-01-22 10 views
0

Я пытаюсь сделать только первую букву каждого слова Uppercase, удаляя любые пробелы в начале и в конце предложения .eg.Сделать несколько более высоких упорядоченных функций больше consice

«красный ковер изложили мне» -> «Красный ковер уложен Перед Me»

я мог бы использовать РегВыр, но я не слишком хорошо знакомы с это (предложения очень приветствуются). То, как я это делал, было связывание нескольких более высокоупорядоченных функций, которые кажутся слишком сложными для данной задачи. Я хотел бы, чтобы любой другой подход к нему.

//this function removes the whitespaces at the extreme ends of passed string 
 

 
function removeOuterSpace(strArg) { 
 
    return strArg.replace(/^\s*|\s*$/g, '') 
 
} 
 

 
// this function takes the actual string and does the rest 
 

 
function firstUCase(str) { 
 
    var newStr = (removeOuterSpace(str).split(' ') 
 
    .map(function(items) { 
 
     return items[0].toUpperCase() + items.slice(1, items.length) 
 
    })).join(' ') 
 
    return newStr 
 
} 
 

 
firstUCase(' the quIck brown fox jumps ')

Edit: Результаты вышли быть: "The булок"

ответ

2

Вы можете попробовать это:

function firstUCase(str) { 
    var newStr = (str.trim().split(' ') 
    .map(function(items) { 
     return items[0].toUpperCase() + items.slice(1, items.length).toLowerCase(); 
    })).join(' ') 
    return newStr 
} 

firstUCase(' the quIck brown fox jumps ') //The Quick Brown Fox Jumps 

firstUCase(' a red carpet Is laid beFOre me ') // A Red Carpet Is Laid Before Me 

Javascript уже имеет встроенный в функции, называемой .trim, что (из документов):

(...) удаляет пробелы с обоих концов строки. Пробелом в этом контексте являются все пробельные символы (пробел, табуляция, свободное пространство, и т. Д.) И все символы терминатора строки (LF, CR и т. Д.).

Кроме того, вы должны добавить .toLowerCase() в конце своей нарезанной части, чтобы опустить остальную часть строки.

Или, если вы хотите использовать регулярное выражение, вы можете попробовать что-то вроде этого:

function firstUCase(str) { 
    return str 
     .trim() 
     .replace(/\b(\w)(\w*)/g, (word,letter,rest) => letter.toUpperCase() + rest.toLowerCase()) 
} 

firstUCase(' the quIck brown fox jumps ') //The Quick Brown Fox Jumps 

firstUCase(' a red carpet Is laid beFOre me ') // A Red Carpet Is Laid Before Me 

Выше .replace метод принимает функцию в качестве второго параметра (документы here), которые могут быть использованы для замены (первая группа = первая буква, вторая группа = остальная часть предложения) с toUpperCase() и toLowerCase(), соответственно. Вы можете играть с ним здесь: http://regexr.com/3f4bg

0

Короткое решение с использованием String.prototype.replace функции:

function firstUCase(str) { 
 
    return str.trim().replace(/\b\w+\b/g, function (m) { 
 
    return m[0].toUpperCase() + m.slice(1).toLowerCase(); 
 
    }); 
 
} 
 
console.log(firstUCase(" a red carpet Is laid beFOre me "));

+0

Могу ли я спросить, что делает w +, когда у вас уже есть «g» в конце? – Jamie

+0

'\ w +' и '/ g' модификаторы абсолютно разные. Это материал регулярного выражения – RomanPerekhrest

0

Существует действительно более простые способы.первых, String.prototype.trim() удаляет пробелы, то, как вы себе представить, что есть способ использовать регулярное выражение, чтобы иметь более простую процедуру:

function replacer(str){ 
 
    return str.toUpperCase(); 
 
} 
 
function firstUCase(str) { 
 
    var newStr = str.trim().toLowerCase();//remove spaces and get everything to lower case 
 
    return newStr.replace(/\b\w/g, replacer); 
 
} 
 

 
console.log(firstUCase(' the quIck brown fox jumps '));

0

Вот регулярное выражение-решение:

function replacer(match) { 
 
    return match.charAt(0).toUpperCase() + match.slice(1); 
 
} 
 

 
function formatString(str) { 
 
    return str 
 
    .trim() 
 
    .toLowerCase() 
 
    .replace(/\b([a-z])/g, replacer); 
 
} 
 
    
 
console.log(formatString(" a red carpet Is laid beFOre me "));