度量单位的正则表达式

时间:2019-04-09 12:19:47

标签: javascript regex regexp-substr

我正在使用RegExp在表中转换度量。由于它是由Magento构建的,因此我无法控制HTML结构。

基本上,代码正在以ft为单位转换月份,因为在某些情况下,度量单位为m²/ ltrm²,因此我无法在末尾插入$。

重要提示:该代码对所有情况都适用,除了当数字后面出现一个以m开头的单词时(如下面的图片所示)。

首次加载时打印:

enter image description here

点击转换后打印:

enter image description here

我阅读了很多有关正则表达式的文章和问题,但是由于这种情况非常复杂,所以我还没有找到解决方案。

我正在使用以下代码:

function convertUnits($type) {
        if($type == 1) {
            var unitMapping = {
              mm : { unit : ' inch', ratio : 0.0393701 },
              cm : { unit : ' inch', ratio : 0.393701 },
              m2 : { unit : ' sq ft', ratio : 10.7639 },
              m : { unit : ' ft', ratio : 3.28084 },
              kg : { unit : ' lb', ratio : 2.20462 },
              g : { unit : ' oz', ratio : 0.035274 }
            };
            var regexp = new RegExp('([+-]?\\d*\\.\\d+)(?![-+0-9\\.])\\s?(' + Object.keys(unitMapping).join('|') + ')', 'g');
            var regexp1 = new RegExp('(\\d{1,6})\\s?(' + Object.keys(unitMapping).join('|') + ')', 'g');
            var replaceFunction = function(match, value, unit){
                if(unit == "mm" && value >= 304.8) {
                    // If over 1 foot, change to feet from inch
                    return Math.round((value*0.00328084 + 0.00001) * 100) / 100 + ' ft';
                }else{
                    return Math.round((value*unitMapping[unit].ratio + 0.00001) * 100) / 100 + unitMapping[unit].unit;
                }
            };
            var replaceNode = document.querySelector('.switchContent');
            //var replaceNode1 = document.querySelector('.box1In h1');
            console.log(regexp)
            console.warn(regexp1)
            replaceNode.innerHTML = replaceNode.innerHTML.replace(regexp, replaceFunction);
            replaceNode.innerHTML = replaceNode.innerHTML.replace(regexp1, replaceFunction);
            //replaceNode1.innerHTML = replaceNode1.innerHTML.replace(regexp, replaceFunction);
        }else{
            jQuery('.switchContent').html(tech);
        }
    }

console.log显示如下:

/([+-]?\d*\.\d+)(?![-+0-9\.])\s?(mm|cm|m2|m|kg|g)/g
/(\d{1,6})\s?(mm|cm|m2|m|kg|g)/g

如何更改我的代码以在这种情况下工作?

0 个答案:

没有答案