如何在javascript中获取两个相同字符之间的子字符串?

所以我知道如何使用索引或分割方法从 2 个字符中获取子字符串。但我陷入了许多具有相似名称的字符串的情况,例如:

   "2020-12-09-name_of_this_mission_num1_mission1_fileName_something"
   "2020-12-09-name_of_this_mission_num1_mission12_fileName_something"
   "2020-12-09-name_of_this_mission_num23_mission1_fileName_something_else"

就像我被困在如何提取“mission#”部分一样,因为有时名称可能不同,所以长度不同,有时名称相同,与文件名相同。我也考虑过使用“_”的索引,但是有多个“_”,如果名称不同,它们可能最终会出现在不同的索引中。

有人能给我一些提示吗?


POPMUISE
浏览 149回答 3
3回答

肥皂起泡泡

如果字符串的结构始终相同 - 并且您想要“mission”的第二个实例 - 则将完整字符串拆分为“mission”的文本。这将产生一个包含三个部分的数组 - ["2020-12-09-name_of_this_", " num1 ", "1_fileName_something"])然后获取此部分数组中的最后一项,并从结果字符串的开头获取数字。然后,您可以在其前面加上删除的“任务”前缀,将其推入一个数组中,这样您就拥有了一系列任务。如果您的初始字符串不包含“mission”的两个实例,那么您可以将其设置为返回第二个而不是第三个部分,就像我对“mission2”所做的那样。const  missions =  [  "2020-12-09-name_of_this_mission_num1_mission1_fileName_something",  "2020-12-09-name_of_this_mission_num1_mission12_fileName_something",  "2020-12-09-name_of_this_mission_num23_mission1_fileName_something_else",  "2020-12-09-name_of_this_mission2_fileName_something_else"]let missionsArr = [];missions.forEach(function(mission) {  const missionPortions = mission.split('mission');  let index;     missionPortions.length == 2    ? index = 1    : index = 2      missionsArr.push('mission' + parseInt(missionPortions[index]))})console.log(missionsArr); //gives ["mission1","mission12", "mission1", "mission2"];

三国纷争

一个简单的正则表达式匹配函数。请注意,“match”输出一个数组,因此推送 match[0]:const  missions =  [  "2020-12-09-name_of_this_mission_num1_mission1_fileName_something",  "2020-12-09-name_of_this_mission_num1_mission12_fileName_something",  "2020-12-09-name_of_this_mission_num23_mission1_fileName_something_else"]let Arr = [];missions.forEach(function(mission) {  const missionID = mission.match(/mission\d+/);  Arr.push(missionID[0]);})console.log(Arr);

心有法竹

获取任务##的最简单方法是使用正则表达式,假设#是可变的数字位数。基本正则表达式将匹配后跟至少一个数字的/mission\d+/字符串。"mission"假设您的输入为:const missionsTexts = [  "2020-12-09-name_of_this_mission_num1_mission1_fileName_something",  "2020-12-09-name_of_this_mission_num1_mission12_fileName_something",  "2020-12-09-name_of_this_mission_num23_mission1_fileName_something_else"];mission#您可以使用以下算法将它们转换为数组:const missions = missionsTexts.map(missionText => missionText.match(/mission\d+/g)[0]);请注意,这假设mission#每个任务文本只有一个。该g修饰符用于确保正则表达式不会在找到的第一个数字之后创建匹配项。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript