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

时间:2015-10-14 00:53:28

标签: javascript regex

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

使用正则表达式(在nodeJS中,使用javascript),我正在尝试提取位置名称 last (第4次)每个位置的整数。

[ '          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("                              ")

这将位置的名称与四个整数分开,但这将变成效率低下的混乱。

有人可以用正则表达式优雅地做到这一点吗?

3 个答案:

答案 0 :(得分:0)

这将捕获您的所有列:

/'\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

答案 1 :(得分:0)

尝试一下: /^'\s+(\w+ +\w*)( +\d+){3} +(\d+)'/

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

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

答案 2 :(得分:0)

如果您不是专门寻找正则表达式来解析整个数据,这里有一种方法可以轻松完成:

foreach ($models as $model) {
    echo Editable::widget( [
        'model' => $model,
        'attribute' => 'name',
        'url' => 'site/rename',
        'type' => 'text',
        'mode' => 'pop',
        'clientOptions' => [
'            pk' => $model->id,
        ]
    ]);
}

我使用了Regex101链接中的数据来演示jsFiddle