正则expression式只返回第一个匹配?

我有一个包含很多行的文本文件,我正在过滤它们来查找我需要的内容,例如:

HBIJB LX 0359 25Aug14 07:37 

这是我的正则expression式:

 /(?:(HB...)\s(LX|WK)\s((?:[0-9]){1,4})\s((?:[0-9]){2}(?:[AZ,az]){3}(?:[0-9]){2})\s((?:[0-9]){2}:(?:[0-9]){2}))/g 

我的问题是它只返回文件中的第一个匹配项:

 [ 'HBIJB LX 0359 25Aug14 07:37', 'HBIJB', 'LX', '0359', '25Aug14', '07:37', index: 323, input: /* Omitted */ ] 

答案是完美的,但是为什么我只能得到第一个匹配,即使我使用了全局/g标志?

编辑:

我正在使用NodeJs,而脚本是没有什么奇特的:

 var regex = /(?:(HB...)\s(LX|WK)\s((?:[0-9]){1,4})\s((?:[0-9]){2}(?:[AZ,az]){3}(?:[0-9]){2})\s((?:[0-9]){2}:(?:[0-9]){2}))/g console.log(regex.exec(data)); 

编辑2:

这里是我需要过滤的内容的外推。

 Lorem Ipsum Ø HBIJB LX 0359 25Aug14 07:37 HBIPV LX 2092 25Aug14 09:09 Lorem Ø HBIJB LX 1404 25Aug14 09:59 HBIJB LX 1405 25Aug14 10:53 

这对我来说可以,

 > var s = "Lorem Ipsum Ø HBIJB LX 0359 25Aug14 07:37 HBIPV LX 2092 25Aug14 09:09\nLorem Ø HBIJB LX 1404 25Aug14 09:59 HBIJB LX 1405 25Aug14 10:53"; undefined > console.log(s) Lorem Ipsum Ø HBIJB LX 0359 25Aug14 07:37 HBIPV LX 2092 25Aug14 09:09 Lorem Ø HBIJB LX 1404 25Aug14 09:59 HBIJB LX 1405 25Aug14 10:53 undefined > m = s.match((?:(HB...)\s(LX|WK)\s((?:[0-9]){1,4})\s((?:[0-9]){2}(?:[AZ,az]){3}(?:[0-9]){2})\s((?:[0-9]){2}:(?:[0-9]){2}))) > m = s.match(/(?:(HB...)\s(LX|WK)\s((?:[0-9]){1,4})\s((?:[0-9]){2}(?:[AZ,az]){3}(?:[0-9]){2})\s((?:[0-9]){2}:(?:[0-9]){2}))/g); [ 'HBIJB LX 0359 25Aug14 07:37', 'HBIPV LX 2092 25Aug14 09:09', 'HBIJB LX 1404 25Aug14 09:59', 'HBIJB LX 1405 25Aug14 10:53' ] 

这是Avinash Raj提供的正确答案的澄清和扩展。

问题是,我正在使用RegExp.prototype.exec()但为了我打算做,我需要首先使用String.prototype.match()

 var values = "Lorem Ipsum Ø HBIJB LX 0359 25Aug14 07:37 HBIPV LX 2092 25Aug14 09:09\nLorem Ø HBIJB LX 1404 25Aug14 09:59 HBIJB LX 1405 25Aug14 10:53"; values.match(/(?:(HB...)\s(LX|WK)\s((?:[0-9]){1,4})\s((?:[0-9]){2}(?:[AZ,az]){3}(?:[0-9]){2})\s((?:[0-9]){2}:(?:[0-9]){2}))/g); values.forEach(function(row) { var regex = /(?:(HB...)\s(LX|WK)\s((?:[0-9]){1,4})\s((?:[0-9]){2}(?:[AZ,az]){3}(?:[0-9]){2})\s((?:[0-9]){2}:(?:[0-9]){2}))/g; var data = regex.exec(row)); } 

这是因为String.prototype.match()返回一个包含与给定RegExp匹配的每个string的数组,而RegExp.prototype.exec()返回一个包含给定RegExp匹配的组的数组,如果有多个string匹配,只返回第一个。