Javascript 制作返回姓名首字母的RegExp的最佳方法是什么?

Javascript 制作返回姓名首字母的RegExp的最佳方法是什么?,javascript,regex,Javascript,Regex,我试图创建一个具有以下预期结果的RegExp: Input: Elon Musk Expected: EM Input: Elon musk Expected: EM Input: Elon Expected: EL 我放弃了,并使用了以下JS代码: 函数首字母(名称){ 返回name.toUpperCase().split(/\s+/g).map((s,_i,arr)=>(arr.length>1?s[0]:s[0]+s[1])).reduce((a,b)=>a+b).子字符串(0,2)

我试图创建一个具有以下预期结果的RegExp:

Input: Elon Musk
Expected: EM

Input: Elon musk
Expected: EM

Input: Elon
Expected: EL
我放弃了,并使用了以下JS代码:

函数首字母(名称){
返回name.toUpperCase().split(/\s+/g).map((s,_i,arr)=>(arr.length>1?s[0]:s[0]+s[1])).reduce((a,b)=>a+b).子字符串(0,2);
}
制作两个独立的正则表达式也很容易(例如:
name.replace(/^\s*([a-z])。+?\s+([a-z]).*$/,“$1$2”)


但是,我知道这应该是一种只使用一个RegExp来实现的方法。

这里有一个不太好的解决方案:

函数首字母(名称){
return(name.match(/^(\w)\w*\s+(\w)|^(\w)(\w)\w*$/)| |[])。slice(1,5)。filter(v=>v)。join(“”)。toUpperCase();
}
您可以使用

.replace(/^(\S{2})\S*$|(?:^|\s*)(\S)\S*\s*/g, '$1$2').toUpperCase()
请参阅和JavaScript演示:

const缩写=(name,regex)=>name.replace(regex,$1$2').toUpperCase()
const arr=['Elon Musk','Elon Musk','Elon'];
const rex=/^(\S{2})\S*$|(?:^ |\S*)(\S)\S*\S*/g;

arr.forEach(x=>console.log(x,=>,首字母缩写(x,rex))
name.replace(/^(\S{2})\S*$$[^A-Z]*([A-Z])[^A-Z]*/g,$1$2')。toUpperCase()
?它似乎只满足了单字输入@WiktorStribiżewSee的预期结果。为什么只有一个单词?你的测试字符串是什么?你是对的@WiktorStribiżew,我刚刚添加了缺少的测试字符串,我相应地更新了我的答案。