Javascript 正则表达式:从字符串中提取位置名和最后一个整数

Javascript 正则表达式:从字符串中提取位置名和最后一个整数,javascript,regex,Javascript,Regex,我有以下字符串数组。这些名称是位置,每个位置都有4个“附加”的整数 使用regex(在nodeJS中,使用javascript),我试图提取位置的名称,以及每个位置的最后一个整数(第四个) [ ' UNICENTRO CALI 1131908 296780 133622 968750', ' PASTO 2

我有以下字符串数组。这些名称是位置,每个位置都有4个“附加”的整数

使用regex(在nodeJS中,使用javascript),我试图提取位置的名称,以及每个位置的最后一个整数(第四个)

[ '          UNICENTRO CALI                                               1131908       296780       133622       968750',
  '          PASTO 2                                                      1044057       212780       133004       964281',
  '          CALIMA                                                       1397254       311214       173761     1259801',
  '          PALMIRA2                                                       922857       272954       103978       753881',
  '          PEREIRA CRA 6                                                1188885       157589       165004     1196300',
  '          DE LA CUESTA-BUCARAMANGA                                       219916        49526        27261       197651' ]
例如,对于第一个位置,我需要搜索“UNICENTRO CALI”和“968750”

为此,我尝试了:

myArray[i].split("                              ")
这将从四个整数中分离出位置的名称,但这将导致效率低下的混乱


有人能用正则表达式优雅地完成吗?

这将捕获您的所有列:

/'\s+(.*\S)?\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)'/

capture group 1 = location
capture group 2 = num 1
capture group 3 = num 2
capture group 4 = num 3
capture group 5 = num 4

var str = "'          UNICENTRO CALI                                          1131908       296780       133622       968750'";
var arr = /'\s+(.*\S)?\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)'/.exec(str);


> console.log(arr)
[Log] Array (6)
0"' UNICENTRO CALI 1131908 296780 133622 968750'"
1"UNICENTRO CALI"
2"1131908"
3"296780"
4"133622"
5"968750"
Array Prototype
您的数据已更改,请使用以下命令:

/'(.*\S)\s+([\d,]+)\s+([\d,]+)\s+([\d,]+)\s+([\d,]+)'/

https://regex101.com/r/jJ6xM7/2
尝试一下:
/^'\s+(\w++\w*)(++\d+{3}+(\d+)/

其中$1(组1)是您的位置,$3(组3)是每行上的最后一组整数

正如我提到的,你的原始帖子中的数据发生了变化。使用ergonaut推荐的表达式:
/'(..*\S)\S+([\d,]+)\S+([\d,]+)\S+([\d,]+)\S+([\d,]+)”/

如果您不是专门寻找正则表达式来解析整个数据,这里有一种简单的方法:


我使用了您的Regex101链接中的数据进行演示。

您在该链接中使用的示例与原始帖子中的示例不同。请看这里,使用原始字符串:非常优雅,特别是在分离为JSON对象时,谢谢
var a = [ 'Total C.O.          UNICENTRO CALI                                               1,131,908       296,780       133,622       968,750',
  'Total C.O.          PLAZA CAICEDO                                                  988,721       272,182       114,641       831,180',
  'Total C.O.          COSMOCENTRO                                                    692,679       159,488        85,309       618,500',
  'Total C.O.          PASTO 2                                                      1,044,057       212,780       133,004       964,281'];

var b = [];
a.forEach(function(item){
    var splitItem = item.split(/\s\s+/),
    len = splitItem.length;
    b.push({"name":splitItem[1], "value":splitItem[len-1]});
});
console.log(b);