使多个更高阶的函数更加简洁

时间:2017-01-22 18:44:09

标签: javascript arrays regex string higher-order-functions

我试图只删除每个单词大写的第一个字母,同时删除句子开头和结尾的任何空格。

  

红地毯奠定了我的作用” - > “以前放置了一块红地毯   我

我可以使用regExp,但我不太熟悉它(建议非常受欢迎)。我这样做的方法是链接多个高阶函数,这对于给定的任务来说似乎过于复杂。我希望有任何其他方法来解决它。

//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 ')

编辑:结果出现:“QuIck Brown Fox跳跃”

4 个答案:

答案 0 :(得分: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的内置函数(来自文档):

  

(...)从字符串的两端删除空格。这个空白   context是所有空格字符(空格,制表符,不间断空格,   等)和所有行终止符(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方法接受一个函数作为第二个参数(docs here),可用于替换捕获的组(第一组=第一个字母,第二组=句子的其余部分)分别为toUpperCase()toLowerCase()。你可以在这里玩它:http://regexr.com/3f4bg

答案 1 :(得分: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  "));

答案 2 :(得分: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 '));




答案 3 :(得分: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 "));