Javascript 有一个函数可以很好地将字符串缩短为一个、两个或三个字母

Javascript 有一个函数可以很好地将字符串缩短为一个、两个或三个字母,javascript,Javascript,有一个很好的函数/lib等,可以很好地缩短字符串(类似于ios circle contact,但更先进) 例如: 无名氏->法学博士 我的棋盘->Mb 非常长的东西->Svl 我的超长板->MVl 仪表板->数据库 标题->t 标题->T 约翰多->法学博士 无名氏->法学博士 等等 我真的可以自己写每一个我能看到的案例,但是我正在寻找一些好的,也许比我的例子更聪明的东西(如果超过3个单词,省略文章,如果超过3个单词,省略破折号等等) 精确性:好的是我的问题。我正在寻找一个像stringjs

有一个很好的函数/lib等,可以很好地缩短字符串(类似于ios circle contact,但更先进)

例如:

  • 无名氏->法学博士
  • 我的棋盘->Mb
  • 非常长的东西->Svl
  • 我的超长板->MVl
  • 仪表板->数据库
  • 标题->t
  • 标题->T
  • 约翰多->法学博士
  • 无名氏->法学博士
  • 等等
我真的可以自己写每一个我能看到的案例,但是我正在寻找一些好的,也许比我的例子更聪明的东西(如果超过3个单词,省略文章,如果超过3个单词,省略破折号等等)

精确性:好的是我的问题。我正在寻找一个像stringjs.com/barrelarejs(normalize、capitalize、slugify…)这样的库,或者一个简单的函数,但是有一个很好的缩短方法

目前,我使用这段代码(更新w/terabaud答案,thx dude):

功能缩短器(标签){
//http://www.ranks.nl/stopwords
var stopWords=“alors au aucuns aussi autre avec avoir bon car”
+“ce cela ceux chaque ci comme comme comment comment comment comment des du”
+“我们的生活是如此美好”
+“但是,你的生活和你的信仰是一样的”
+“这是一个很好的选择”
+“我的主租户是我的主租户,我的主租户是我的主租户”
+“Ni-NoMe No.NueNuvou-O-Par PARE PARCE假释”
+“公共服务人员将为您提供优质服务”
+“不,不,不,不,不”
+“我的儿子在坦迪斯岛苏杰特”
+“这是一个很好的选择”
+“vont votre vous vuçaétaientétateétionsététre”;
var articles=stopWords.split(“”);
返回(标签| |“”)
.替换(/[A-Z]/g,“$&”)//在每个大写字母前添加空格
.replace(/[[u \-']/g,”)//replace \-为空格
.拆分(“”)
.过滤器(函数(字){
返回单词!==“”
})
.map(函数(word、idx、arr){
//返回每个单词的第一个字母
//如果超过2个单词,省略冠词
return(arr.length>2&&articles.indexOf(word.toLowerCase())>-1)?“”:word[0];
}).join(“”).slice(0,3);
};
[“John Doe”、“我的棋盘”、“很长的东西”、“我的很长的棋盘”、“仪表盘”、“标题”、“标题”、“JohnDoe”、“avec无用词”、“John_Doe”]。forEach(函数(str){
document.body.innerHTML++=shortener(str)+'
';
});
对存储
字符串的变量使用
indexOf
如何查找:

空格、大写字母或破折号的前三个实例


这三个字母会给你一个很好的缩写。

我会按以下顺序使用正则表达式:

  • 把空间放在任何资本之前
  • 将特殊字符更改为空格
  • 删除每个单词中第一个字母后的所有字母
  • 删除所有空间

  • 没有简单的方法可以做到这一点。试着这样做:

    var articles=[“the”,“a”,“an”];
    函数缩短(str){
    返回(str | |“”)
    .替换(/[A-Z]/g,“$&”)//在每个大写字母前添加空格
    .replace(/[\u \-]/g,”)//replace_ \-为空格
    .拆分(“”)
    .filter(函数(字){返回字!==“”})
    .map(函数(word、idx、arr){
    //返回每个单词的第一个字母
    //如果超过3个单词,省略冠词
    返回arr.length>3&&
    articles.indexOf(word.toLowerCase())>-1?
    “”:单词[0];
    }).join(“”).slice(0,3);
    }
    [“约翰·多伊”,“我的董事会”,
    “非常长的东西”,
    “我的长板”,
    “仪表板”,
    “头衔”,
    “头衔”,
    “约翰多”,
    “John_Doe”].forEach(职能(标题){
    document.body.innerHTML+=缩短(标题)+'
    ';
    });我不确定这是否是您想要的:请在下面发表评论

    "My Very Long Board".split(' ').map(function(word){
     return word[0];
    }).join('').slice(0, 3)
    

    “我真的可以自己写”-当你有问题(可以复制)时,就去做吧,那时你应该回来寻求我们的帮助。请给我们一些努力。如果您将您的问题发布在codegolf.stackexchange.com上,作为寻找最短/最好解决方案的挑战,可能会更好,就像使用map:)