正则表达式 - 两个数字在一起

时间:2016-04-12 11:35:40

标签: regex

我有字符串:

1,2,3,4,5,6,7,8

我需要将这一数字序列分成一对。

输出应如下所示:

[
  [1,2],
  [3,4],
  [5,6],
  [7,8],
]

我正在尝试这个正则表达式:

/(([\d]+)[,\s]([\d]+)[,\s]?)+/

在php中:

preg_match_all('/(([\d]+)[,\s]([\d]+)[,\s]?)+/', $item['cords'], $matches);

但输出匹配只是最后两个数字 - https://regex101.com/r/oV2nQ4/1

3 个答案:

答案 0 :(得分:1)

不要通过量词来获得这些群体。捕获这两个数字并改为使用全局标志。

试试这个:

(\d+),(\d+),?

Like this regex101 example

此致

答案 1 :(得分:1)

var str = '1,2,3,4,5,6,7,8';

var regex = /(\d+\,\d+)/g;

var r = str.match(regex).map(e => e.split(',').map(Number));

document.write('<pre>' + JSON.stringify(r) + '</pre>');

答案 2 :(得分:0)

试试这个经过测试的sed命令:

 sed -e 's/\([0-9],[0-9]\)/[\1]/g' -e 's/^\(.*\)$/[\1,]/' -e 's/[[][[]/[\n  [/' -e 's/[]],/],\n  /g' -e 's/  []]/]/g'

测试:

$ printf "1,2,3,4,5,6,7,8\n" | sed -e 's/\([0-9],[0-9]\)/[\1]/g' -e 's/^\(.*\)$/[\1,]/' -e 's/[[][[]/[\n  [/' -e 's/[]],/],\n  /g' -e 's/  []]/]/g'
[
  [1,2],
  [3,4],
  [5,6],
  [7,8],
]