2016-05-13 57 views
1

我在寫測驗的提示系統。提示將是答案的變體。爲了使字謎更容易,我保留第一個和最後一個字母相同。如何生成易於保存標點符號的字典?

var _ = require('underscore'); 

var easy = function(s) { 
    if (s.length <= 1) { 
     return s; 
    } 
    return s[0] + _.shuffle(s.slice(1, -1)).join("") + s.slice(-1); 
}; 

對於多個單詞的答案,我想分開每個單詞的字謎。我寫道:

var peasy = function(s) { 
    return s.split(/\W/).map(easy).join(" "); 
} 

但是,這會在答案中丟失任何標點符號(用空格替換它)。我想將標點符號保留在原來的位置。我怎樣才能做到這一點?

這裏有三個例子來測試:

console.log(peasy("mashed potatoes")); 
console.log(peasy("computer-aided design")); 
console.log(peasy("sophie's choice")); 

My功能peasy以上失敗第二和第三例子,因爲它失去連字符和撇號。

+1

你'easy'函數可以返回's'如果'(s.length <= 3)'。通過保留第一個和最後一個字符,只有長度大於3的字符串真的被洗牌... – ericbn

回答

4

通過拆分單詞分隔符的伎倆:

var peasy = function(s) { 
    return s.split(/\b/).map(easy).join(""); 
} 

說明: "computer-aided design".split(/\b/)結果["computer", "-", "aided", " ", "design"]。然後,你得洗每個元素與easy加入他們,越來越像"ctemopur-adeid diegsn"回來......

+0

謝謝你的工作 –

2

它更簡單易用String.prototype.replace,而不是分裂的:

  • 你不需要後的第一個切片和在最後一封信之前。
  • 替換隻發生在單詞字符上(其他字符保持不變)
  • 跳過少於4個字符的單詞。
  • 它更短,不需要easy功能。
var _ = require('underscore'); 

var peasy = function(s) { 
    return s.replace(/\B\w{2,}\B/g, function (m) { 
     return _.shuffle(m).join(''); 
    }); 
}