我有一个简单的问题,我想我需要帮助。所以,我有一个接受这种格式的字符串的函数
"1. Crowe, Velvet (LoC), 2. Hume, Eleanor (Ext), 4. Shigure, Rokurou (DmN), 10. Mayvin, Magilou (MgC)"
不带引号。
基本上,带有军衔编号的人名列表。
我想要的是拆分它们,以便我将得到 ff 结果:
[
"1. Crowe, Velvet (LoC)",
"2. Hume, Eleanor (Ext)",
"4. Shigure, Rokurou (DmN)",
"10. Mayvin, Magilou (MgC)"
]
有没有办法做到这一点?我使用了split()
方法,但它每次看到逗号出现时都会拆分字符串。
您可以使用正则表达式拆分/(?<=)),s/
:
const str = "1. Crowe, Velvet (LoC), 2. Hume, Eleanor (Ext), 4. Shigure, Rokurou (DmN), 10. Mayvin, Magilou (MgC)";
const res = str.split(/(?<=)),s/);
console.log(res);
这将按照 cmgchess 在评论中的建议在),
上拆分。基于字符串拆分的问题在于它会删除要保留的一些字符。相反,通过使用正则表达式,您可以使用(?<=))
(此处?<=
称为正后视)来匹配并将)
保留在生成的拆分元素中。然后,,s
根据逗号后跟空格 (s
) 进行拆分。
您也可以将以下正则表达式与.match()
一起使用,该正则表达式更健壮一些,但可能需要根据数字/排名后面的文本进行更新:
/d+.sw+,sw+s(w+)/g
以上执行:
d+.
:将匹配一个或多个(+
)数字,后跟一个点s
:匹配空格字符w+,
: 匹配多个(+
)字字符(w
)中的一个,后跟逗号,
s
:匹配空格(w+)
:匹配用括号括起来的单词字符(
)
/g
:全局标志,用于匹配字符串中所有出现的序列
const str = "1. Crowe, Velvet (LoC), 2. Hume, Eleanor (Ext), 4. Shigure, Rokurou (DmN), 10. Mayvin, Magilou (MgC)";
const res = str.match(/d+.sw+,sw+s(w+)/g);
console.log(res);
只是对@cmgchess
的答案稍作改进(添加trim
方法来删除不必要的空格):
const getUsers = (str) => {
const users = str.split('),').map(x => x.trim() + ')');
users[users.length - 1] = users[users.length - 1].replace('))', ')');
return users;
}
console.log(getUsers("1. Crowe, Velvet (LoC), 2. Hume, Eleanor (Ext), 4. Shigure, Rokurou (DmN), 10. Mayvin, Magilou (MgC)"));