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);
我有一个简单的问题,我认为我需要帮助。所以,我有一个接受这种格式的字符串的函数
"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);