javascript - 正则表达式/Javascript 将十进制度分转换为十进制度

标签 javascript regex

我在 GeoServer 源代码中找到了一个函数,它允许我在 Javascript 中将度分秒转换为十进制。但我需要将Degrees Decimal Minutes 转换为 Decimal Degrees。

当前函数将执行此操作:

   input: N 03° 01’ 37” 
   output: 30.016666666666666

但我需要一个函数来执行此操作:

   input: 26° 23.90473
   output: ????

最好的答案是调整现有的 RegEx,但任何转换它的 Javascript 解决方案都可以。

这是当前函数: 但我需要它接受度数小数分而不是度分秒。

dmsToDeg: function(dms) { 
        if (!dms) { 
            return Number.NaN; 
        } 
        var neg= dms.match(/(^\s?-)|(\s?[SW]\s?$)/)!=null? -1.0 : 1.0; 
        dms= dms.replace(/(^\s?-)|(\s?[NSEW]\s?)$/,''); 
        dms= dms.replace(/\s/g,''); 
        var parts=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 
        // 3 : secondes 
        // 4 : fractions of seconde 
        var d= (parts[1]?         parts[1]  : '0.0')*1.0; 
        var m= (parts[2]?         parts[2]  : '0.0')*1.0; 
        var s= (parts[3]?         parts[3]  : '0.0')*1.0; 
        var r= (parts[4]? ('0.' + parts[4]) : '0.0')*1.0; 
        var dec= (d + (m/60.0) + (s/3600.0) + (r/3600.0))*neg; 
        return dec; 
    },

最佳答案

新功能...

dmsToDeg: function(dms) { 
        if (!dms) { 
            return Number.NaN; 
        } 
        var neg = dms.match(/(^\s?-)|(\s?[SW]\s?$)/)!=null? -1.0 : 1.0; 
        dms = dms.replace(/(^\s?-)|(\s?[NSEW]\s?)$/,''); 
        var parts=dms.match(/(\d{1,3})[.,°d ]?\s*(\d{0,2}(?:\.\d+)?)[']?/); 
        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; 
    }

我已经删除了正则表达式的最后一部分,它捕获秒和秒的分数。我已经添加到捕获分钟的部分 (?:\.\d+)? 这是一个非捕获组 (?:) - 因为我们不需要它与分钟的整数部分分开捕获。它需要一个小数点 (\.),然后是一位或多位数字 (\d+)。整个组是可选的 (?) - 即输入仍然可以是整数。

编辑:根据您的评论,我将其修改为更加与空白无关...它现在查找后跟空格或以下字符之一的整数:". ,°d"然后是十进制分钟。解决方案也发布到您的 jsfiddle:http://jsfiddle.net/NJDp4/6/

关于javascript - 正则表达式/Javascript 将十进制度分转换为十进制度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5938115/

相关文章:

javascript - 无法生成 TopoJSON 以与 D3 的 Choropleth 示例一起使用

javascript - 选择序列化形式中缺少的元素?

Python 查找大量字符串的正则表达式模式

正则表达式只匹配一行中第一次出现的四个数字

regex - 如何在Lua中编写此正则表达式?

javascript - Sencha Touch、Apigee JS SDK 和 Phonegap 可在浏览器中运行,但不能在 IOS 中运行

javascript - 在名称属性中带有增量索引的表单内创建新字段,该变量似乎不被考虑

c# - 文本框中仅允许字母数字

javascript - 正则表达式中的/是什么意思?

javascript - ES6 按数组中的对象属性求和