Javascript 如何生成简单的保留标点的字谜?

Javascript 如何生成简单的保留标点的字谜?,javascript,regex,Javascript,Regex,我正在为测验写提示系统。这些提示是答案的字谜。为了使字谜更容易理解,我把第一个字母和最后一个字母保持不变 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 _ = require('underscore');

var easy = function(s) {
    if (s.length <= 1) {
        return s;
    }
    return s[0] + _.shuffle(s.slice(1, -1)).join("") + s.slice(-1);
};
但是,这会丢失答案中的任何标点符号(替换为空格)。我想把标点保持在原来的位置。我该怎么做

以下是三个要测试的示例:

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

上面的My function
peasy
未能通过第二个和第三个示例,因为它丢失了连字符和撇号。

通过单词分隔符进行拆分可以达到以下目的:

var peasy = function(s) {
    return s.split(/\b/).map(easy).join("");
}
说明:
“计算机辅助设计”。拆分(/\b/)
会导致
[“计算机”、“-”、“辅助”、“,”设计]
。然后你用
easy
洗牌每个元素并加入它们,得到类似
“ctemopur adeid diegsn”
的东西…

按单词分隔符拆分的方法:

var peasy = function(s) {
    return s.split(/\b/).map(easy).join("");
}
说明:
“计算机辅助设计”。拆分(/\b/)
会导致
[“计算机”、“-”、“辅助”、“,”设计]
。然后用
easy
洗牌每个元素并加入它们,得到类似
“ctemopur adeid diegsn”
的东西…

使用
String.prototype更简单。替换
而不是拆分:

  • 你不需要在第一个字母之后和最后一个字母之前切片
  • 替换仅在单词字符上发生(其他字符保持不变)
  • 跳过少于4个字符的单词
  • 它比较短,不需要
    easy
    功能
var\=require('下划线');
var peasy=函数{
返回s.replace(/\B\w{2,}\B/g,函数(m){
返回uu.shuffle(m.join)('');
});
}

使用
String.prototype更简单。替换
而不是拆分:

  • 你不需要在第一个字母之后和最后一个字母之前切片
  • 替换仅在单词字符上发生(其他字符保持不变)
  • 跳过少于4个字符的单词
  • 它比较短,不需要
    easy
    功能
var\=require('下划线');
var peasy=函数{
返回s.replace(/\B\w{2,}\B/g,函数(m){
返回uu.shuffle(m.join)('');
});
}

您的
easy
函数可以返回
s
if
(s.length)您的
easy
函数可以返回
s
if
(s.length