2017-03-04 65 views
0

我在javaScript下面遇到问题。JavaScript:修改句子

问题: 你被给了一个字符串s,它应该是一个句子。然而,有人忘记在不同的单词之间留出空格,并且由于某种原因,他们将每个单词的首字母大写。做出以下修改后返回句子:

在单词之间放置单个空格。 将大写字母转换为小写字母。

“CodefightsIsAwesome” 时,输出应为 “codefights是真棒”;

“你好”,输出应该是“你好”。

我当前的代码是:

enter image description here

现在,我的第二个for循环只是手动从字符串切片部分。 我怎样才能使这个动态和插入资本字符串前面的“空间”?

请帮

+0

什么是S –

+0

@JijoCleetus的输入字符串值? – guest271314

回答

2

您可以使用String.prototype.match()RegExp/[A-Z][^A-Z]*/g匹配后面是不是A-Z,或字符在字符串的结尾一个或多个字符A-Z;链Array.prototype.map()在匹配字上调用.toLowerCase(),用参数" "调用.join()以在结果字符串处包含匹配之间的空格字符。

var str = "CodefightsIsAwesome"; 
 
var res = str.match(/[A-Z][^A-Z]*/g).map(word => word.toLowerCase()).join(" "); 
 
console.log(res);

另外,通过@FissureKing的建议,你可以使用String.prototype.repalce().trim().toLowerCase()

var str = "CodefightsIsAwesome"; 
 
var res = str.replace(/[A-Z][^A-Z]*/g, word => word + ' ').trim().toLowerCase(); 
 
console.log(res);

+1

也许'*'而不是'+',以允许单字母单词? – nnnnnn

+0

@nnnnnn查看更新后的帖子。替代'[a-z]'的'[^ A-Z]'匹配不是大写字母的字符。 – guest271314

+0

那么如果输入是“ThereIsNobodyCrazierThanI”? – nnnnnn

-1

我们可以遍历一次。

下面假设我们的返回数组中首字母应该总是大写。如果不是这样,只需从下面删除第一个if块。

对于之后的每个字符,我们检查它是否大写。如果是这样,我们将它添加到我们的返回数组中,并以空格开头。如果不是,我们将它按原样添加到我们的数组中。

最后,我们将数组连接回字符串并返回。

const sentence = "CodefightsIsAwesome"; 
 

 
const amend = function(s) { 
 
    ret = []; 
 
    for (let i = 0; i < s.length; i++) { 
 
    const char = s[i]; 
 
    if (i === 0) { 
 
     ret.push(char.toUpperCase()); 
 
    } else if (char.toUpperCase() === char) { 
 
     ret.push(` ${char.toLowerCase()}`); 
 
    } else { 
 
     ret.push(char); 
 
    } 
 
    } 
 
    return ret.join(''); 
 
}; 
 

 
console.log(amend(sentence));

1

而不是编码一个循环,我会用一个(合理的)简单的字符串替换做在一个行:

function amendTheSentence(s) { 
 
    return s.replace(/[A-Z]/g, function(m) { return " " + m.toLowerCase() }) 
 
      .replace(/^ /, ""); 
 
} 
 

 
console.log(amendTheSentence("CodefightsIsAwesome")); 
 
console.log(amendTheSentence("noCapitalOnFirstWord")); 
 
console.log(amendTheSentence("ThereIsNobodyCrazierThanI"));

那是,用正则表达式/[A-Z]/匹配任何大写字母,替换th e匹配的字母与空格加小写的字母,然后删除在字符串开头添加的所有空格。

延伸阅读: