JSFiddle - React, Tailwind, and code Playground
HTML
<div id="info"></div>
JavaScript
function ddmToDeg(ddm) {
if (!ddm) {
return Number.NaN;
}
var neg= ddm.match(/(^\s?-)|(\s?[SW]\s?$)/)!=null? -1.0 : 1.0;
ddm= ddm.replace(/(^\s?-)|(\s?[NSEW]\s?)$/,'');
ddm= ddm.replace(/\s/g,'');
var parts=ddm.match(/(\d{1,3})[.,°d]?(\d{0,2}(?:\.\d+)?)[']?/);
//dms.match(/(\d{1,3})[.,°d]?(\d{0,2})[']?(\d{0,2})[.,]?(\d{0,})(?:["]|[']{2})?/);
if (parts==null) {
return Number.NaN;
}
// parts:
// 0 : degree
// 1 : degree
// 2 : minutes
var d= (parts[1]? parts[1] : '0.0')*1.0;
var m= (parts[2]? parts[2] : '0.0')*1.0;
var dec= (d + (m/60.0))*neg;
return dec;
}
//test case #1
var result = ddmToDeg('77° 50.51086497');
//test case #2
result += "<br>" + ddmToDeg('77 50.51086497');
//test case #3
result += "<br>" + ddmToDeg('77 50.51086497');
//test case #4
result += "<br>" + ddmToDeg('-113° 40.54687527');
//test case #5
result += "<br>" + ddmToDeg('-113 40.54687527');
//test case #6
result += "<br>" + ddmToDeg('-113 40.54687527 ');
$("#info").html(result);