如何匹配所有5位数字但跳过第一场比赛

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何匹配所有5位数字但跳过第一场比赛相关的知识,希望对你有一定的参考价值。

我正在尝试提取与员工编号相关的文件名中的所有5位数字。我遇到的问题是文件名中的前5位数字与作业号有关。我需要跳过第一场比赛,然后继续比赛并匹配所有5位数字

var str = "01_12345_02_02_2019_12347_67890_10112_13141";
var empRegex = /(d{5})/g;
var empNumbers;
empNumbers = str.match(empRegex).toString();
console.log(empNumbers);

我需要"12347, 67890, 10112, 13141"

我得到"12345, 12347, 67890, 10112, 13141"并且找不到任何跳过第一场比赛的东西。

答案

使用shift()

 

var str = "01_12345_02_02_2019_12347_67890_10112_13141";
var empRegex = /(d{5})/g;
var empNumbers = str.match(empRegex);
empNumbers.shift();
empNumbers = empNumbers.toString();
console.log(empNumbers);
另一答案

解:

您的RegEx中有拼写错误。应该是d{5}而不是d{5}

其次,你需要做的就是删除第一个匹配的元素是shift数组。 Array.prototype.shift

重要的是要注意,当你使用shift时,shift的返回将是被删除的元素,而不是新的或改变的数组。这就是为什么必须将变量分配给原始Array,并在赋值后在数组上完成shift方法。

简单地说,你必须这样做:

(empNumbers = str.match(empRegex)).shift(); 

不是这个:

 empNumbers = str.match(empRegex).shift();

由于shift将改变阵列,你最终得到的是array减去第一个匹配的元素。

代码片段:

var str = "01_12345_02_02_2019_12347_67890_10112_13141";
var empRegex = /(d{5})/g;
var empNumbers;
(empNumbers = str.match(empRegex)).shift();
console.log(empNumbers);
另一答案

How to match on all 5 digit numbers but skip the first match

这是一种方式:

var str = "01_12345_02_02_2019_12347_67890_10112_13141";
var empRegex = /(?:^.*?d{5}.*?)?(d{5})/g;
var empNumbers = [];
var item;

while (item = empRegex.exec( str ))
    empNumbers.push(item[1]);

// ---------
console.log(empNumbers);
另一答案

你可以在正则表达式匹配后使用array.slice

var str = "01_12345_02_02_2019_12347_67890_10112_13141";
var empRegex = /(d{5})/g;
var empNumbers;
empNumbers = str.match(empRegex).slice(1).toString();
//                              ---------
console.log(empNumbers);

以上是关于如何匹配所有5位数字但跳过第一场比赛的主要内容,如果未能解决你的问题,请参考以下文章

如何跳过 Codeception cest 测试

有关C++小数输出?

OCAC暑期比赛第一场 D题 足球比赛中的危险状态 题解

跳过第一条重复记录并更新其他记录

OCAC暑期比赛第一场 I题 大小写转换密码锁 题解

问有几个队伍拿过第一名?