gpt4 book ai didi

javascript - 从包含名称的字符串中获取首字母和完整的姓氏

转载 作者:行者123 更新时间:2023-11-29 18:52:02 35 4
gpt4 key购买 nike

假设有一些字符串包含不同格式的名称(每一行都是可能的用户输入):

'Guilcher, G.M., Harvey, M. & Hand, J.P.'
'Ri Liesner, Peter Tom Collins, Michael Richards'
'Manco-Johnson M, Santagostino E, Ljung R.'

我需要转换这些名称以获得 Lastname ABC 格式。因此,每个姓氏都应转换为其首字母,并附加到姓氏。

该示例应产生

Guilcher GM, Harvey M, Hand JP
Liesner R, Collins PT, Richards M
Manco-Johnson M, Santagostino E, Ljung R

问题是不同的(可能的)输入格式。我认为我的尝试不是很聪明,所以我要求

  1. 优化转换代码的一些提示
  2. 如何将它们放在一个函数中?我认为首先我必须测试字符串的格式...??

那么让我解释一下我在多大程度上试图解决这个问题:

第一个示例字符串

在第一个示例中,首字母后跟一个点。点应该被删除,名字和首字母之间的逗号也应该被删除。

firstString
.replace('.', '')
.replace(' &', ', ')

我想我确实需要一个正则表达式来获取名字之后和首字母之前的逗号。

第二个例子字符串

在第二个例子中,名字应该用空格分开,最后一个元素作为姓氏处理:

const elm = secondString.split(/\s+/)
const lastname = elm[elm.length - 1]
const initials = elm.map((n,i) => {
if (i !== elm.length - 1) return capitalizeFirstLetter(n)
})

return lastname + ' ' + initals.join('')

...不是很优雅

第三个示例字符串

第三个示例的格式已经正确 - 只需删除末尾的点。因此,无需对该输入执行任何其他操作。

最佳答案

如果不调用多个 replace() 方法是不可能的。提供的解决方案的步骤如下:

  • 删除缩写名称中的所有点
  • 用名字代替姓氏
  • 用首字母替换姓氏
  • 删除不需要的字符

演示:

var s = `Guilcher, G.M., Harvey, M. & Hand, J.P.
Ri Liesner, Peter Tom Collins, Michael Richards
Manco-Johnson M, Santagostino E, Ljung R.`

// Remove all dots in abbreviated names
var b = s.replace(/\b([A-Z])\./g, '$1')
// Substitute first names and lastnames
.replace(/([A-Z][\w-]+(?: +[A-Z][\w-]+)*) +([A-Z][\w-]+)\b/g, ($0, $1, $2) => {
// Replace full lastnames with their first letter
return $2 + " " + $1.replace(/\b([A-Z])\w+ */g, '$1');
})
// Remove unwanted preceding / following commas and ampersands
.replace(/(,) +([A-Z]+)\b *[,&]?/g, ' $2$1');

console.log(b);

关于javascript - 从包含名称的字符串中获取首字母和完整的姓氏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50916852/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com