【发布时间】:2014-03-24 07:27:29
【问题描述】:
我想用 JavaScript 中的 Regex 识别足球比赛:
1
15/06 16:00
Brasília
Brasilien
3:0 (1:0)
Japan
2
23/06 16:00
Recife
Uruguay
-
Tahiti
本文包含:
- 比赛日期和时间
- 比赛地点
- 两支队伍
- 如果游戏已经玩过,则得分,如果没有,则包含“-”
我已经用http://regex101.com/ 站点构建了一个正则表达式:
(\d\d\/\d\d)\s(\d\d:\d\d)\s(.+)\s\s\s(.+)\s(?:-|(\d):(\d)\s\(\d:\d\))\s(.+)
这个正则表达式应该捕获两种选择(有分数和没有分数) 这是整个测试内容的链接: http://regex101.com/r/bF3lU4
我使用 NodeJS 编写的 JavaScript 代码:
function CreateMatchesFromString(data)
{
var re = /(\d\d\/\d\d)\s(\d\d:\d\d)\s(.+)\s\s\s(.+)\s(?:-|(\d):(\d)\s\(\d:\d\))\s(.+)/g;
var myArray;
while ((myArray = re.exec(data)) !== null)
{
console.log("date:"+ myArray[1]);
console.log("time:"+ myArray[2]);
console.log("place:"+ myArray[3]);
console.log("Home:"+ myArray[4]);
console.log("Away:"+ myArray[5]);
}
}
但我没有得到第 5 捕获组的 Away-Team! 我的输出:
date:26/06
time:22:00
place:Curitiba
Home:Algerien
Away:undefined
只有当我没有用“|”做替代表达时我才会明白:
(\d\d\/\d\d)\s(\d\d:\d\d)\s(.+)\s\s\s(.+)\s-\s(.+)
或者当我使用“[”“]”而不是“(”和“)”对备选方案进行分组时。
有什么问题? 它是 Nodejs 正则表达式引擎中的一个错误,因为它忽略了最后一个捕获组!?或者 正则表达式错了吗?
最好的问候 迈克尔
【问题讨论】:
标签: javascript regex node.js