Javascript 当字符串中有空格时如何使用substring()

Javascript 当字符串中有空格时如何使用substring(),javascript,Javascript,我有一个字符串,其中包含一个人的名字和姓氏,例如johndoe。我想将此字符串转换为John D.通常,我只会在last name变量上使用substring(0,1),但是当名字和姓氏是一个字符串,中间有空格时,如何实现这一点呢?您可以使用string.split(“”): 注意:这只适用于名字和姓氏,没有中间名的情况。使用split()获取姓氏 var fullName = "John Doe"; var names= fullName .split(" "); var shortFullN

我有一个字符串,其中包含一个人的名字和姓氏,例如
johndoe
。我想将此字符串转换为
John D.
通常,我只会在last name变量上使用
substring(0,1)
,但是当名字和姓氏是一个字符串,中间有空格时,如何实现这一点呢?

您可以使用string.split(“”):

注意:这只适用于名字和姓氏,没有中间名的情况。

使用
split()
获取姓氏

var fullName = "John Doe";
var names= fullName .split(" ");
var shortFullName=names[0]+" "+names[1].substring(0,1)+".";
alert(shortFullName);

您可以使用match

console.log('johndoe.match(/(.*)/)[0]+');

log('John Frank Doe'.match(/(.*)/)[0]+')您可以通过按空格分隔姓名并修改姓氏来完成此操作

var name = "John Doe"; // store the name

var nameParts = name.split(" "); // split the name by spaces

var lastName = nameParts[nameParts.length - 1]; // get the last name
lastName = lastName.substring(0, 1) + "."; // replace the last name with the first letter and a full stop

nameParts[nameParts.length - 1] = lastName; // insert the last name back into the array of names at the end

name = nameParts.join(" "); // join the names back together with their original spaces

console.log(name); // gives "John D."

这也满足了问题注释中讨论的名称
John Frank Doe
,在这种情况下,将给出
John Frank D.

您可以通过拆分返回一个数组,该数组由上述字符串内容组成,由空格分隔,然后通过子字符串对其进行操作:

var name = "first last"; 
var firstLast = name.Split(" "); 
alert(firstLast[0] + " " + firstLast[1].substring(0,1));//
“约翰·D。”


您可以使用
string.lastIndexOf()

var fullname=“John Frank Doe”;
var result=fullname.substring(0,fullname.lastIndexOf(“”+2)+”;

console.log(result)
我建议使用
字符串。将
替换为regex
/(\S)\S*\S*$/

"John Doe".replace(/ (\S)\S*\s*$/, ' $1.'); // John D.
示例:

  • 约翰·弗兰克·多伊⇒ 约翰·弗兰克D
  • 彼得P⇒ 彼得P
  • K⇒ K
  • 彼得·奥尼尔⇒ 彼得O
  • 阿尔夫肯·斯特林⇒ ÜlfkenÖ
var名称=[
“约翰·康姆”,
“苏珊·安东尼·克莱因”,
“Elise R.Johann”,
“西蒙·R·K.”,
“彼得P”,
“彼得”,
“P”,
“彼得·奥尼尔”,
“唐纳德·麦金太尔”,
“Beween中的John空白”,
“结尾处的约翰空白”,
“约翰·拉贝和雷纳·里尔克”,
“厄尔夫肯•斯特林”
],
shorten=name=>name.replace(/(\S)\S*\S*$/,“$1”);

对于(名称名称)console.log(缩写(名称))John Frank Doe的预期输出是什么?你还可以分享一下你试过什么吗?不应该有中间名,但在这种情况下应该是John Frank D。如果姓氏是MacDonald、McDonald或O'Neil怎么办@AndrewTruckle想起来了,我不确定它们通常是如何格式化为首字母的。麦克唐纳到M?MacD?MD?谢谢,我可以改用这种方法。如果我这样做了,我会把它标记为答案。
var a = 'John Doe';
var b = a.split(' ');
var c = b[0] + ' ' + b[1].substring(0,1) + '.'; 
"John Doe".replace(/ (\S)\S*\s*$/, ' $1.'); // John D.