2015-12-10 21 views
0

我正在嘗試將字符串中的單詞反轉而對標點符號沒有任何影響。
這是我當前的代碼:如何在不顛倒標點的情況下反轉字符串?

function reverse(str) { 
    str = str.split("").reverse().join(""); 
    str = str.split(" ").reverse().join(" "); 
    console.log(str) 
}; 

reverse("This is fun, hopefully.") 

上述功能的結果sihT si ,nuf .yllufepoh
當我試圖把它像sihT si nuf, yllufepoh.

+1

不能扭轉字符串保持標點字符到位。但是你可以通過保持標點符號來反轉每一個字。改變你的問題,更清楚地表達你的意圖。 – zerkms

+4

不清楚這應該做什麼。你的例子的預期輸出是什麼? – Thilo

+0

以上函數的結果是(sihT si,nuf .yllufepoh)。雖然我試圖讓它像這樣(sihT si nuf,yllufepoh。) –

回答

3

另一種方法是用替換和正則表達式,例如,使用它們的反轉形式替換所有字母序列。

function reverseWords(s) { 
 
    return s.replace(/[a-z]+/ig, function(w){return w.split('').reverse().join('')}); 
 
} 
 

 
document.write(reverseWords("This is fun, hopefully.")); // sihT si nuf, yllufepoh.

如果您希望包括數字作爲單詞字符(WG W3C),然後正則表達式應該是:

/\ w +/g的

+0

bravo RobG!很簡單。 –

+0

整潔的把戲!分隔符是真正的分心。 –

0

你可以用正則表達式做的更好,但是這是我剛寫的一個簡單的解決方案。

function reverse(str){ 
    var out = ''; 
    var word = ''; 
    for (var i=0;i<str.length;i++) { 
     // your punctuation characters 
     if (',.!? '.indexOf(str[i]) == -1) word += str[i]; 
     else { 
      out += word.split('').reverse().join(''); 
      out += str[i]; 
      word = ''; 
     } 
    } 
    return out; 
}; 

console.log(reverse("This is fun, hopefully.")); 
2

拆分在字邊界的句子,不消耗任何的字符串,
然後每個字分成其字母使用先行?=因此那些(非空格與\S)不消耗。
反轉字母數組,然後不加分隔符地重新加入它們.join("")
並最終重新加入句子,再次沒有分隔符,因爲單詞之間的空格在原始分詞時保留下來。

var sentence = "This is fun, hopefully."; 
sentence.split(/\b/) 
     .map(w => w.split(/(?=\S)/) 
        .reverse() 
        .join("")) 
    .join(""); 

在Chrome的JavaScript控制檯這樣做產生的輸出:
"sihT si nuf, yllufepoh."

這並不正確處理標點符號的運行。例如,hopefully!?將變爲yllufepoh?!,也顛倒了標點符號。

相關問題