I have these strings:
17/07/13 03:50:24 12.122N 88.214W 21 4.0 107 Km al suroeste de Boca del Padre Ramos 17/07/12 20:51:36 10.630N 6.634W 16 3.3 94 Km al noroeste de Tamarindo, Costa Rica 17/07/12 13:28:09 13.389N 87.986W 4 2.8 17 Km al noroeste de La Union, El Salvador 17/07/12 13:20:49 11.030N 85.177W 225 2.2 41 Km al sureste de Cárdenas 17/07/11 13:04:47 13.389N 87.981W 1 3.2 16 Km al noroeste de La Union, El Salvador 17/07/11 12:01:34 9.241N 83.983W 27 2.5 14 Km al oeste de Dominical, Costa Rica
and i want to convert them to this:
17/07/13 03:50:24 12.122N 88.214W 21 4.0 107 Km al suroeste de Boca del Padre Ramos 17/07/12 20:51:36 10.630N 6.634W 16 3.3 94 Km al noroeste de Tamarindo, Costa Rica 17/07/12 13:28:09 13.389N 87.986W 4 2.8 17 Km al noroeste de La Union, El Salvador 17/07/12 13:20:49 11.030N 85.177W 225 2.2 41 Km al sureste de Cárdenas 17/07/11 13:04:47 13.389N 87.981W 1 3.2 16 Km al noroeste de La Union, El Salvador 17/07/11 12:01:34 9.241N 83.983W 27 2.5 14 Km al oeste de Dominical, Costa Rica
Want to do it with Regular Expressions in Javascript.
NOTE 1: The goal is to align the data in the “fifth, sixth and seven column” from right to left.
The fifth column has from 1 to 3 digits.
The sixth column always has 1 digit, a dot and another digit.
The seven column has digits from 1 to 3 digits, the phrase ‘km al’, and other words.
NOTE 2: Every line is independent (i have each one in an array) I put more than 1 line to show the differents kinds of scenarios, because finally i need to print out all the lines.
EDIT (to avoid the question to be closed):
I have tried this:
line.replace(/^((?:s*S+){5})s+?([sd]{5}.)/, "$1 $2").trim();
but does not work as I expected, because align from left to right.
Thanks a lot !
Advertisement
Answer
I guess you could use string.slice().
The regex /^(s*S+(s+)(?:S+s+){2}S+)s+(S+)s+(S+)s+(S+)/
Explained
^ # BOL
( # (1 start), Written back unchanged
s* S+
( s+ ) # (2), Minimum Column spacing
(?: S+ s+ ){2}
S+
) # (1 end)
s+
( S+ ) # (3), Column 5 data
s+
( S+ ) # (4), Column 6 data
s+
( S+ ) # (5), Column 7 data
JS code
var Sary = [
"17/07/13 03:50:24 12.122N 88.214W 21 4.0 107 Km al suroeste de Boca del Padre Ramos",
"17/07/12 20:51:36 10.630N 6.634W 16 3.3 94 Km al noroeste de Tamarindo, Costa Rica",
"17/07/12 13:28:09 13.389N 87.986W 4 2.8 17 Km al noroeste de La Union, El Salvador",
"17/07/12 13:20:49 11.030N 85.177W 225 2.2 41 Km al sureste de Cárdenas",
"17/07/11 13:04:47 13.389N 87.981W 1 3.2 16 Km al noroeste de La Union, El Salvador",
"17/07/11 12:01:34 9.241N 83.983W 27 2.5 14 Km al oeste de Dominical, Costa Rica"]
;
for(var i=0, len=Sary.length; i < len; i++)
{
var newstr = Sary[i].replace(/^(s*S+(s+)(?:S+s+){2}S+)s+(S+)s+(S+)s+(S+)/g,
function(match, g1, g2, g3, g4, g5) {
return g1 +
g2 + (String(" " + g3).slice(-3)) +
g2 + (String(" " + g4).slice(-3)) +
g2 + (String(" " + g5).slice(-3)) ;
});
console.log( newstr );
}Output
17/07/13 03:50:24 12.122N 88.214W 21 4.0 107 Km al suroeste de Boca del Padre Ramos15:32:26.352 17/07/12 20:51:36 10.630N 6.634W 16 3.3 94 Km al noroeste de Tamarindo, Costa Rica15:32:26.353 17/07/12 13:28:09 13.389N 87.986W 4 2.8 17 Km al noroeste de La Union, El Salvador15:32:26.353 17/07/12 13:20:49 11.030N 85.177W 225 2.2 41 Km al sureste de Cárdenas15:32:26.353 17/07/11 13:04:47 13.389N 87.981W 1 3.2 16 Km al noroeste de La Union, El Salvador15:32:26.353 17/07/11 12:01:34 9.241N 83.983W 27 2.5 14 Km al oeste de Dominical, Costa Rica15:32:26.353