我正在使用RegExp在表中转换度量。由于它是由Magento构建的,因此我无法控制HTML结构。
基本上,代码正在以ft为单位转换月份,因为在某些情况下,度量单位为m²/ ltrm²,因此我无法在末尾插入$。
重要提示:该代码对所有情况都适用,除了当数字后面出现一个以m开头的单词时(如下面的图片所示)。
首次加载时打印:
点击转换后打印:
我阅读了很多有关正则表达式的文章和问题,但是由于这种情况非常复杂,所以我还没有找到解决方案。
我正在使用以下代码:
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
如何更改我的代码以在这种情况下工作?