javascript 中的子字符串或拆分方法



我有一个简单的问题,我想我需要帮助。所以,我有一个接受这种格式的字符串的函数

"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)"));

最新更新