我有这些字符串:
14/04/14 13:31:38 12.54N 88.21W 106.8 3.8ML Frente al Golfo de Fonseca
14/04/14 11:56:04 11.27N 86.98W 15.2 2.9ML Frente a Masachapa
14/04/13 11:17:30 12.60N 86.80W 0.2 0.7ML Cerca del volcan Telica
我希望将它们转换为:
14/04/14 13:31:38 12.54N 88.21W 106.8 3.8ML Frente al Golfo de Fonseca
14/04/14 11:56:04 11.27N 86.98W 15.2 2.9ML Frente a Masachapa
14/04/13 11:17:30 12.60N 86.80W 0.2 0.7ML Cerca del volcan Telica
想在Javascript中使用正则表达式。
注意1 :目标是在“第五列”中对齐数据,如您所见,要对齐的模式是{的第三个外观的{1}}
注意2 :每一行都是独立的(我每个都在一个数组中)我放了超过1行来显示不同类型的场景,因为最后我需要打印出所有的行
非常感谢!
答案 0 :(得分:3)
您可以尝试每一行:
line = line.replace(/^((?:\s*\S+){4})\s+?([\s\d]{5}\.)/, "$1 $2");
方法是在以点结尾的固定长度子模式之前使用延迟量词。
注意:仅当数字有一位小数且位数在2到6之间时才有效。(从0.1到99999.9)
答案 1 :(得分:1)
如果没有单一的正则表达式,这是一个非常难的方法,它会检查每个列以检查具有最长长度的字符串,然后相应地填充。它没有以任何方式计算数字中的句点,它只是根据长度添加填充
function tabulate(arr, sep, col) {
var cols = [];
arr.forEach(function(str) {
str.split(sep).forEach(function(part, i) {
Array.isArray(cols[i]) ? cols[i].push(part) : cols[i] = [part];
});
});
cols.forEach(function(arr2, i) {
if (col.indexOf(i) != -1) {
var padd = arr2.slice().sort(function(a,b) {
return a.length - b.length;
}).pop().length + 1;
arr2.forEach(function(itm, i2) {
cols[i][i2] = (new Array(padd - itm.length)).join(' ') + itm;
});
}
});
return arr.map(function(itm, j) {
return cols.map(function(itm2) {
return itm2[j];
}).join(sep);
});
}
用作
tabulate( array, separator string, [columns to apply function to (zero based)] )
在这种情况下等同于
tabulate(arr, ' ', [4]);