使用正则表达式捕获两组数字

时间:2015-09-08 19:41:29

标签: javascript regex

我有这样的文字:

'BASE CÁL PREV SOC BASE CÁL 13º PREV SOC 01 672 1.653.806,08 18.512,98 1.667.621,57 2.647,38 07 23 12.965,11 0,00 12.965,11 0,00 13 5 10.517,81 0,00 10.517,81 0,00 TOTAIS: 700 1.677.289,00 18.512,98 1.691.104,49 2.647,38'

不替换空格和断行的原始格式为:

NUMBER    OTHER      OTHER        OTHER        BASE CÁL PREV SOC  BASE CÁL 13º PREV SOC 

01        672     1.653.806,09   18.512,98       1.667.621,57        2.647,38
07         23        12.965,11        0,00          12.965,11            0,00
13         05        10.517,87        0,00          10.517,81            0,00
TOTAL:    700     1.677.289,00   18.512,98       1.691.104,49        2.647,38

我想仅在行01和07中提取BASE CÁL PREV SOC列中的信息,但有时07不存在。第13行将被忽略。

所以我希望在一个正则表达式中有一个给定的短语和匹配的组。

为了清楚起见,这些数据是在一个巨大的文本中,所以正则表达式不能是通用的。我必须明确传递一个接近数字的唯一短语。这里选择的短语是'BASE CÁL PREV SOC BASE CÁL 13º PREV SOC'。我只想得到01和07中的数字(虽然07有时不存在),并忽略13。

为了更清楚,在当前的例子中,我预计结果为1.667.621.57和12.965,11。

我有这段代码:

var text = 'BASE CÁL PREV SOC BASE CÁL 13º PREV SOC 01 672 1.653.806,08 18.512,98 1.667.621,57 2.647,38 07 23 12.965,11 0,00 12.965,11 0,00 13 5 10.517,81 0,00 10.517,81 0,00 TOTAIS: 700 1.677.289,00 18.512,98 1.691.104,49 2.647,38';

var reg   = new RegExp('BASE CÁL PREV SOC BASE CÁL 13º PREV SOC' + '\\b.*?(?:\\d\\S*\\s+){4}(\\d\\S*)(?:\\s?\\d\\S*\\s+){5}(\\d\\S*)', 'i');
var match = reg.exec(text);

console.log(match[1]);
console.log(match[2]);

我必须确定该号码是01和07,如果没有07,请将其替换为00,00。

这可能吗?

1 个答案:

答案 0 :(得分:1)

var text = 'BASE CÁL PREV SOC BASE CÁL 13º PREV SOC 01 672 1.653.806,08 18.512,98 1.667.621,57 2.647,38 07 23 12.965,11 0,00 12.965,11 0,00 13 5 10.517,81 0,00 10.517,81 0,00 TOTAIS: 700 1.677.289,00 18.512,98 1.691.104,49 2.647,38'
var reg = new RegExp("\\b(?:01|07)\\b(?:\\s+[\\d.,]+){3}\\s+([\\d.,]+)", 'g')
while( match = reg.exec(text) ) {
  console.log(match[1])
}
相关问题