2017-03-04 69 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匹配的字母與空格加小寫的字母,然後刪除在字符串開頭添加的所有空格。

延伸閱讀: