我需要提取中间名和姓氏
Elev: 7EBB49 (Dan Greg Järgenstedt <[email protected]>)
Expected: Greg Järgenstedt
Elev: 6EBB49 (Dan Järgenstedt <[email protected]>)
Expected: Järgenstedt
Elev: 6EBB49 (Järgenstedt <[email protected]>)
Expected: Järgenstedt
Elev: 6EBB49 (<[email protected]>)
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)
参见regex demo。 u
标志启用Unicode类别类。模式详细信息
(?<!\(\p{L}+\s+|\p{L})
-紧靠左侧,后面没有(
,后面跟着1+个字母,然后是一个或多个空格,或者只有一个字母(作为Unicode字边界)\p{L}+
-一个或多个字母(?:\s+\p{L}+)*
-零次或多次出现1+个空格,然后出现1+个字母(?=\s*<)
-在右边,必须有0+个空格,然后是<
。