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

Substrings or split methods in 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() 方法,但它每次看到出现逗号时都会拆分字符串。

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

您可以使用正则表达式拆分 /(?<=\)),\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 在评论中的建议在 ), 上拆分。基于字符串拆分的问题在于它会删除一些您想要保留的字符。相反,通过使用正则表达式,您可以使用 (?<=\))(此处 ?<= 称为 positive lookbehind)来匹配并保留 )生成的拆分元素。 ,\s 然后根据逗号后跟 space (\s).

进行拆分

您还可以将以下正则表达式与 .match() 一起使用,它更强大一些,但可能需要根据 number/rank 之后的文本进行更新:

/\d+\.\s\w+,\s\w+\s\(\w+\)/g

以上执行:

  • \d+\.:将匹配一个或多个 (+) 数字后跟一个点
  • \s:匹配一个白色space字符
  • \w+,:匹配其中一个(+)word-characters(\w)后跟逗号,
  • \s:匹配一个space
  • \(\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+\.\s\w+,\s\w+\s\(\w+\)/g);
console.log(res);