我有一个包含很多行的文本文件,我正在过滤它们以找到我需要的内容,例如:
HBIJB LX 0359 25Aug14 07:37
这是我的正则表达式:
/(?:(HB...)\s(LX|WK)\s((?:[0-9]){1,4})\s((?:[0-9]){2}(?:[A-Z,a-z]){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}(?:[A-Z,a-z]){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
答案 0 :(得分:2)
它适用于我,
> 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}(?:[A-Z,a-z]){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}(?:[A-Z,a-z]){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' ]
答案 1 :(得分:1)
这是 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}(?:[A-Z,a-z]){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}(?:[A-Z,a-z]){3}(?:[0-9]){2})\s((?:[0-9]){2}:(?:[0-9]){2}))/g;
var data = regex.exec(row));
}
这是因为String.prototype.match()
返回一个包含与给定RegExp匹配的每个字符串的数组,而RegExp.prototype.exec()
返回一个包含给定RegExp匹配的组的数组,如果有多个匹配的字符串,只返回第一个。