我正在为测验编写提示系统。这些提示是答案的连字。为了使字谜更容易,我将首字母和尾字母保持相同。

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"));


我上面的函数peasy在第二和第三个示例中失败了,因为它丢失了连字符和撇号。

最佳答案

按单词分隔符拆分可达到以下目的:

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


说明:
"computer-aided design".split(/\b/)生成["computer", "-", "aided", " ", "design"]。然后,您可以用easy将每个元素洗牌,然后将它们加入,得到类似"ctemopur-adeid diegsn"的东西……

10-08 15:16