正则表达式捕获用引号括起来的逗号分隔数字

时间:2017-03-13 11:58:26

标签: node.js regex

我有一大堆JavaScript代码段,每个代码段包含一行代码:

function('some string without numbers', '123,71')

我希望得到一个正则表达式来从第二个参数中提取数字。第二个参数可以包含任意数量的逗号分隔数字(包含零数字),因此以下都是有效的:

''
'2'
'17,888'
'55,1,6000'
...

正则表达式'(?:\d+|,)*'成功匹配引用的数字,但我不知道如何匹配每个数字。在\d+周围放置一个捕获组似乎捕获了最后一个数字(如果有一个存在 - 如果第二个参数只是''则它不起作用),但是没有其他数字

2 个答案:

答案 0 :(得分:1)

在您的情况下,您可以匹配并捕获单引号内的数字,然后用逗号分隔:

var s = "function('some string without numbers', '123,71')";
var res = s.match(/'([\d,]+)'/) || ["", ""];
console.log(res[1].split(','));

/'([\d,]+)'/正则表达式将匹配',然后是1位数字或逗号(将该值放入第1组),然后是结束'

如果要全局运行正则表达式,请使用

var s = "function('some string without numbers', '123,71')\nfunction('some string without numbers', '13,4,0')";
var rx = /'([\d,]+)'/g;
var res = [], m;
while ((m=rx.exec(s)) !== null) {
  res.push(m[1].split(','));
}
console.log(res);

答案 1 :(得分:0)

如果您在变量x中有数字,请执行以下操作:

var x = '55,1,6000';

然后使用它来获得数字列表:

var array = x.split(',');

如果你可以在逗号之前/之后有一些空格,那么使用:

var array = x.split('\s*,\s*');

或类似的东西。

有时候更容易匹配你不想要的东西并将其拆分。