簡體   English   中英

使用 Javascript 的正則表達式從字符串中提取中間名和姓氏

[英]Extract the middle names and last name from the string using regex of Javascript

我需要提取中間名和姓氏

Elev: 7EBB49 (Dan Greg Järgenstedt <dan.greg.smith@manu.al.edu>)
Expected: Greg Järgenstedt

Elev: 6EBB49 (Dan Järgenstedt <dan.greg.smith@manu.al.edu>)
Expected: Järgenstedt

Elev: 6EBB49 (Järgenstedt <dan.greg.smith@manu.al.edu>)
Expected: Järgenstedt

Elev: 6EBB49 (<dan.greg.smith@manu.al.edu>)
Expected: 

試過

function getSNames(input) {
    const names = input.match(/(?<!\[)(?<=\s)\w+(?=\s)/g);
    return names ? names.join(' ') : '';
}

您可以使用

const names = input.match(/(?<!\(\p{L}+\s+|\p{L})\p{L}+(?:\s+\p{L}+)*(?=\s*<)/gu)

請參閱正則表達式演示 u標志啟用 Unicode 類別類。

圖案詳情

  • (?<!\\(\\p{L}+\\s+|\\p{L}) - 緊靠左邊,不能有(后跟 1+ 個字母,然后是一個或多個空格,或者只是一個字母 (this用作 Unicode 字邊界)
  • \\p{L}+ - 一個或多個字母
  • (?:\\s+\\p{L}+)* - 零次或多次出現 1+ 空格,然后是 1+ 字母
  • (?=\\s*<) - 緊靠右側,必須有 0+ 個空格,然后是<

瘋狂就是這樣說的。

我認為您一般無法“提取中間名和姓氏”。 如果您所擁有的只是“名稱”,那么您就被它困住了。 無論你想出什么規則,我都會向你展示它行不通的地方。 例如

  • 我的名字是“Peter Valdemar Mørch”。 名字=Peter,中間名=Valdemar,姓氏=Mørch
  • 我有一個朋友叫 Jens Erik Redacted。 名字=Jens Erik,沒有中間名,姓氏=已編輯。 每次網站說“Hi Jens”時,都會有點侮辱他,因為他不是“Jens”,而是“Jens Erik”。
  • 我還有一個朋友叫 Kristian von Hornsleth。 名字=Kristian,沒有中間名,姓氏=von Hornsleth
  • 在中文中,姓在名之前。 例如(我不認識他)“王秀英”的英文拼寫為“Wang Xiuying”。 firstname=Xiuying,沒有中間名,lastname=Wang(注意他們是如何交換的

你所做的在一般情況下不起作用,尤其是在國際上。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM