繁体   English   中英

如何在 javascript 的 2 个相同字符之间获得 substring?

[英]How to get a substring in between 2 identical characters in javascript?

所以我知道如何使用索引或拆分方法从 2 个字符中获取 substring。 但是我被困在一个有很多类似名称的字符串的场景中,例如:

   "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_", " num1 ", "1_fileName_something"])

然后获取此部分数组中的最后一项并从结果字符串的开头获取数字。

然后你可以在它前面加上你删除的“任务”,把它推到一个数组中,你就有了一个任务数组。

如果您的初始字符串不包含“任务”的两个实例,那么您可以将其设置为返回第二部分而不是第三部分,就像我对“任务 2”所做的那样。

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

一个简单的正则表达式匹配 function。 注意 'match' 输出一个数组,所以 push 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修饰符用于确保正则表达式不会在找到的第一个数字之后创建匹配项。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM