Javascript 捕捉起始编号和最终编号

Javascript 捕捉起始编号和最终编号,javascript,regex,node.js,Javascript,Regex,Node.js,我试图创建一个正则表达式来捕捉行中的第一个数字和最后一个数字,但最后一个数字有一些问题: 线条如下所示: 00005 SALARIO MENSAL 17030 36.397.291,92 36.397.291,92 00010 HORAS TRABALH

我试图创建一个正则表达式来捕捉行中的第一个数字和最后一个数字,但最后一个数字有一些问题:

线条如下所示:

00005    SALARIO MENSAL                                                 17030         36.397.291,92                                                              36.397.291,92
00010    HORAS TRABALHADAS                                              0798              19.731,93                                                                  19.731,93
这是我的正则表达式:

(^\d+).*(\d)
正如您在这里看到的:没有按预期工作。我可以得到第一个,但最后一个只是最后一个数字


谢谢

您需要将
*
更改为
*?
并将
+
添加到第二个数字序列匹配中,从而使
*
不贪婪

^(\d+).*?(\d+)$
如果要匹配最后一个完整数字,请使用以下命令:

^(\d+).*?([\d\.,]+)$

我尝试了以下方法:

(^(\d+)|(\d+$)

它似乎在regexr.com上起作用。但是匹配它们可能需要一些假设,即每行至少有两个数字。

您可以使用

/^(\d+).*?(\d+(?:[,.]\d+)*)$/gm

正则表达式匹配:

  • ^
    -行首
  • (\d+)
    -将一个或多个数字捕获到组1中
  • *?
    -匹配除换行符以外的任何字符,尽可能少到
  • (\d+(?:[,.]\d+*)
    -一个或多个数字后跟零个或多个
    序列,后跟一个或多个数字(第2组)
  • $
    -字符串结尾

/g
修饰符确保我们获得所有匹配项,
/m
修饰符使
^
$
分别匹配行的开头和结尾。

(\d)
只匹配一个数字<代码>(\d+)将匹配一个或多个数字。缺少最后一个数字的量词这不是正则表达式的任务。使用拆分方法,您的字段可能由制表符分隔(或者在最坏的情况下由几个空格分隔)。预期的匹配是什么?我想您可以在本例中尝试
/^(\d+).*(\d+(?:[,.]\d+*)$/
:00005 36.397.291,92和00010 19.731,93@WiktorStribiżewPerfect!如果我没有要求太多,我仍然试图通过一些教程和网站来学习RegExp,但对我来说,这是非常混乱的。你能解释一下第二部分吗?请注意,这可能不是处理大量数据的最佳方法。逐行获取数据并使用制表符或空格进行拆分可能是最好的方法(Casimir在他的评论中建议了这一点)。你认为用正则表达式是危险的吗?还是因为表现?是的,我是说表现。不过,在每行中使用我的正则表达式也不会有问题。如果您喜欢先使用换行符拆分(或将数据作为流读取),请获取它。谢谢你的提示!!他的第二个数字有逗号和句点。更新后包含了这一点。我只想指出,
[\d]
=
\d
[\d\,]+
(这等于
[\d,]+
)也可以匹配行末的
,,,,,,
。(它实际上可能匹配非数字实体)。